/*
 * SPDX-License-Identifier: Apache-2.0
 *
 * The OpenSearch Contributors require contributions made to
 * this file be licensed under the Apache-2.0 license or a
 * compatible open source license.
 */

/*
 * Licensed to Elasticsearch under one or more contributor
 * license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright
 * ownership. Elasticsearch licenses this file to you under
 * the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

/*
 * Modifications Copyright OpenSearch Contributors. See
 * GitHub history for details.
 */

package org.opensearch.search.aggregations.metrics;

/**
 * Hyperloglog counter, implemented based on pseudo code from
 * <a href="http://static.googleusercontent.com/media/research.google.com/fr//pubs/archive/40671.pdf">40671.pdf</a> and its
 * <a href="https://docs.google.com/document/d/1gyjfMHy43U9OWBXxfaeG-3MjGzejW1dlpyMwEYAAWEI/view?fullscreen">appendix</a>
 * <p>
 * Trying to understand what this class does without having read the paper is considered adventurous.
 *
 * @opensearch.internal
 */
public abstract class AbstractHyperLogLog extends AbstractCardinalityAlgorithm {

    private static final int P2 = 25;
    private static final int BIAS_K = 6;

    // these static tables come from the appendix of the paper
    private static final double[][] RAW_ESTIMATE_DATA = {
        // precision 4
        {
            11,
            11.717,
            12.207,
            12.7896,
            13.2882,
            13.8204,
            14.3772,
            14.9342,
            15.5202,
            16.161,
            16.7722,
            17.4636,
            18.0396,
            18.6766,
            19.3566,
            20.0454,
            20.7936,
            21.4856,
            22.2666,
            22.9946,
            23.766,
            24.4692,
            25.3638,
            26.0764,
            26.7864,
            27.7602,
            28.4814,
            29.433,
            30.2926,
            31.0664,
            31.9996,
            32.7956,
            33.5366,
            34.5894,
            35.5738,
            36.2698,
            37.3682,
            38.0544,
            39.2342,
            40.0108,
            40.7966,
            41.9298,
            42.8704,
            43.6358,
            44.5194,
            45.773,
            46.6772,
            47.6174,
            48.4888,
            49.3304,
            50.2506,
            51.4996,
            52.3824,
            53.3078,
            54.3984,
            55.5838,
            56.6618,
            57.2174,
            58.3514,
            59.0802,
            60.1482,
            61.0376,
            62.3598,
            62.8078,
            63.9744,
            64.914,
            65.781,
            67.1806,
            68.0594,
            68.8446,
            69.7928,
            70.8248,
            71.8324,
            72.8598,
            73.6246,
            74.7014,
            75.393,
            76.6708,
            77.2394, },
        // precision 5
        {
            23,
            23.1194,
            23.8208,
            24.2318,
            24.77,
            25.2436,
            25.7774,
            26.2848,
            26.8224,
            27.3742,
            27.9336,
            28.503,
            29.0494,
            29.6292,
            30.2124,
            30.798,
            31.367,
            31.9728,
            32.5944,
            33.217,
            33.8438,
            34.3696,
            35.0956,
            35.7044,
            36.324,
            37.0668,
            37.6698,
            38.3644,
            39.049,
            39.6918,
            40.4146,
            41.082,
            41.687,
            42.5398,
            43.2462,
            43.857,
            44.6606,
            45.4168,
            46.1248,
            46.9222,
            47.6804,
            48.447,
            49.3454,
            49.9594,
            50.7636,
            51.5776,
            52.331,
            53.19,
            53.9676,
            54.7564,
            55.5314,
            56.4442,
            57.3708,
            57.9774,
            58.9624,
            59.8796,
            60.755,
            61.472,
            62.2076,
            63.1024,
            63.8908,
            64.7338,
            65.7728,
            66.629,
            67.413,
            68.3266,
            69.1524,
            70.2642,
            71.1806,
            72.0566,
            72.9192,
            73.7598,
            74.3516,
            75.5802,
            76.4386,
            77.4916,
            78.1524,
            79.1892,
            79.8414,
            80.8798,
            81.8376,
            82.4698,
            83.7656,
            84.331,
            85.5914,
            86.6012,
            87.7016,
            88.5582,
            89.3394,
            90.3544,
            91.4912,
            92.308,
            93.3552,
            93.9746,
            95.2052,
            95.727,
            97.1322,
            98.3944,
            98.7588,
            100.242,
            101.1914,
            102.2538,
            102.8776,
            103.6292,
            105.1932,
            105.9152,
            107.0868,
            107.6728,
            108.7144,
            110.3114,
            110.8716,
            111.245,
            112.7908,
            113.7064,
            114.636,
            115.7464,
            116.1788,
            117.7464,
            118.4896,
            119.6166,
            120.5082,
            121.7798,
            122.9028,
            123.4426,
            124.8854,
            125.705,
            126.4652,
            128.3464,
            128.3462,
            130.0398,
            131.0342,
            131.0042,
            132.4766,
            133.511,
            134.7252,
            135.425,
            136.5172,
            138.0572,
            138.6694,
            139.3712,
            140.8598,
            141.4594,
            142.554,
            143.4006,
            144.7374,
            146.1634,
            146.8994,
            147.605,
            147.9304,
            149.1636,
            150.2468,
            151.5876,
            152.2096,
            153.7032,
            154.7146,
            155.807,
            156.9228,
            157.0372,
            158.5852, },
        // precision 6
        {
            46,
            46.1902,
            47.271,
            47.8358,
            48.8142,
            49.2854,
            50.317,
            51.354,
            51.8924,
            52.9436,
            53.4596,
            54.5262,
            55.6248,
            56.1574,
            57.2822,
            57.837,
            58.9636,
            60.074,
            60.7042,
            61.7976,
            62.4772,
            63.6564,
            64.7942,
            65.5004,
            66.686,
            67.291,
            68.5672,
            69.8556,
            70.4982,
            71.8204,
            72.4252,
            73.7744,
            75.0786,
            75.8344,
            77.0294,
            77.8098,
            79.0794,
            80.5732,
            81.1878,
            82.5648,
            83.2902,
            84.6784,
            85.3352,
            86.8946,
            88.3712,
            89.0852,
            90.499,
            91.2686,
            92.6844,
            94.2234,
            94.9732,
            96.3356,
            97.2286,
            98.7262,
            100.3284,
            101.1048,
            102.5962,
            103.3562,
            105.1272,
            106.4184,
            107.4974,
            109.0822,
            109.856,
            111.48,
            113.2834,
            114.0208,
            115.637,
            116.5174,
            118.0576,
            119.7476,
            120.427,
            122.1326,
            123.2372,
            125.2788,
            126.6776,
            127.7926,
            129.1952,
            129.9564,
            131.6454,
            133.87,
            134.5428,
            136.2,
            137.0294,
            138.6278,
            139.6782,
            141.792,
            143.3516,
            144.2832,
            146.0394,
            147.0748,
            148.4912,
            150.849,
            151.696,
            153.5404,
            154.073,
            156.3714,
            157.7216,
            158.7328,
            160.4208,
            161.4184,
            163.9424,
            165.2772,
            166.411,
            168.1308,
            168.769,
            170.9258,
            172.6828,
            173.7502,
            175.706,
            176.3886,
            179.0186,
            180.4518,
            181.927,
            183.4172,
            184.4114,
            186.033,
            188.5124,
            189.5564,
            191.6008,
            192.4172,
            193.8044,
            194.997,
            197.4548,
            198.8948,
            200.2346,
            202.3086,
            203.1548,
            204.8842,
            206.6508,
            206.6772,
            209.7254,
            210.4752,
            212.7228,
            214.6614,
            215.1676,
            217.793,
            218.0006,
            219.9052,
            221.66,
            223.5588,
            225.1636,
            225.6882,
            227.7126,
            229.4502,
            231.1978,
            232.9756,
            233.1654,
            236.727,
            238.1974,
            237.7474,
            241.1346,
            242.3048,
            244.1948,
            245.3134,
            246.879,
            249.1204,
            249.853,
            252.6792,
            253.857,
            254.4486,
            257.2362,
            257.9534,
            260.0286,
            260.5632,
            262.663,
            264.723,
            265.7566,
            267.2566,
            267.1624,
            270.62,
            272.8216,
            273.2166,
            275.2056,
            276.2202,
            278.3726,
            280.3344,
            281.9284,
            283.9728,
            284.1924,
            286.4872,
            287.587,
            289.807,
            291.1206,
            292.769,
            294.8708,
            296.665,
            297.1182,
            299.4012,
            300.6352,
            302.1354,
            304.1756,
            306.1606,
            307.3462,
            308.5214,
            309.4134,
            310.8352,
            313.9684,
            315.837,
            316.7796,
            318.9858, },
        // precision 7
        {
            92,
            93.4934,
            94.9758,
            96.4574,
            97.9718,
            99.4954,
            101.5302,
            103.0756,
            104.6374,
            106.1782,
            107.7888,
            109.9522,
            111.592,
            113.2532,
            114.9086,
            116.5938,
            118.9474,
            120.6796,
            122.4394,
            124.2176,
            125.9768,
            128.4214,
            130.2528,
            132.0102,
            133.8658,
            135.7278,
            138.3044,
            140.1316,
            142.093,
            144.0032,
            145.9092,
            148.6306,
            150.5294,
            152.5756,
            154.6508,
            156.662,
            159.552,
            161.3724,
            163.617,
            165.5754,
            167.7872,
            169.8444,
            172.7988,
            174.8606,
            177.2118,
            179.3566,
            181.4476,
            184.5882,
            186.6816,
            189.0824,
            191.0258,
            193.6048,
            196.4436,
            198.7274,
            200.957,
            203.147,
            205.4364,
            208.7592,
            211.3386,
            213.781,
            215.8028,
            218.656,
            221.6544,
            223.996,
            226.4718,
            229.1544,
            231.6098,
            234.5956,
            237.0616,
            239.5758,
            242.4878,
            244.5244,
            248.2146,
            250.724,
            252.8722,
            255.5198,
            258.0414,
            261.941,
            264.9048,
            266.87,
            269.4304,
            272.028,
            274.4708,
            278.37,
            281.0624,
            283.4668,
            286.5532,
            289.4352,
            293.2564,
            295.2744,
            298.2118,
            300.7472,
            304.1456,
            307.2928,
            309.7504,
            312.5528,
            315.979,
            318.2102,
            322.1834,
            324.3494,
            327.325,
            330.6614,
            332.903,
            337.2544,
            339.9042,
            343.215,
            345.2864,
            348.0814,
            352.6764,
            355.301,
            357.139,
            360.658,
            363.1732,
            366.5902,
            369.9538,
            373.0828,
            375.922,
            378.9902,
            382.7328,
            386.4538,
            388.1136,
            391.2234,
            394.0878,
            396.708,
            401.1556,
            404.1852,
            406.6372,
            409.6822,
            412.7796,
            416.6078,
            418.4916,
            422.131,
            424.5376,
            428.1988,
            432.211,
            434.4502,
            438.5282,
            440.912,
            444.0448,
            447.7432,
            450.8524,
            453.7988,
            456.7858,
            458.8868,
            463.9886,
            466.5064,
            468.9124,
            472.6616,
            475.4682,
            478.582,
            481.304,
            485.2738,
            488.6894,
            490.329,
            496.106,
            497.6908,
            501.1374,
            504.5322,
            506.8848,
            510.3324,
            513.4512,
            516.179,
            520.4412,
            522.6066,
            526.167,
            528.7794,
            533.379,
            536.067,
            538.46,
            542.9116,
            545.692,
            547.9546,
            552.493,
            555.2722,
            557.335,
            562.449,
            564.2014,
            569.0738,
            571.0974,
            574.8564,
            578.2996,
            581.409,
            583.9704,
            585.8098,
            589.6528,
            594.5998,
            595.958,
            600.068,
            603.3278,
            608.2016,
            609.9632,
            612.864,
            615.43,
            620.7794,
            621.272,
            625.8644,
            629.206,
            633.219,
            634.5154,
            638.6102, },
        // precision 8
        {
            184.2152,
            187.2454,
            190.2096,
            193.6652,
            196.6312,
            199.6822,
            203.249,
            206.3296,
            210.0038,
            213.2074,
            216.4612,
            220.27,
            223.5178,
            227.4412,
            230.8032,
            234.1634,
            238.1688,
            241.6074,
            245.6946,
            249.2664,
            252.8228,
            257.0432,
            260.6824,
            264.9464,
            268.6268,
            272.2626,
            276.8376,
            280.4034,
            284.8956,
            288.8522,
            292.7638,
            297.3552,
            301.3556,
            305.7526,
            309.9292,
            313.8954,
            318.8198,
            322.7668,
            327.298,
            331.6688,
            335.9466,
            340.9746,
            345.1672,
            349.3474,
            354.3028,
            358.8912,
            364.114,
            368.4646,
            372.9744,
            378.4092,
            382.6022,
            387.843,
            392.5684,
            397.1652,
            402.5426,
            407.4152,
            412.5388,
            417.3592,
            422.1366,
            427.486,
            432.3918,
            437.5076,
            442.509,
            447.3834,
            453.3498,
            458.0668,
            463.7346,
            469.1228,
            473.4528,
            479.7,
            484.644,
            491.0518,
            495.5774,
            500.9068,
            506.432,
            512.1666,
            517.434,
            522.6644,
            527.4894,
            533.6312,
            538.3804,
            544.292,
            550.5496,
            556.0234,
            562.8206,
            566.6146,
            572.4188,
            579.117,
            583.6762,
            590.6576,
            595.7864,
            601.509,
            607.5334,
            612.9204,
            619.772,
            624.2924,
            630.8654,
            636.1836,
            642.745,
            649.1316,
            655.0386,
            660.0136,
            666.6342,
            671.6196,
            678.1866,
            684.4282,
            689.3324,
            695.4794,
            702.5038,
            708.129,
            713.528,
            720.3204,
            726.463,
            732.7928,
            739.123,
            744.7418,
            751.2192,
            756.5102,
            762.6066,
            769.0184,
            775.2224,
            781.4014,
            787.7618,
            794.1436,
            798.6506,
            805.6378,
            811.766,
            819.7514,
            824.5776,
            828.7322,
            837.8048,
            843.6302,
            849.9336,
            854.4798,
            861.3388,
            867.9894,
            873.8196,
            880.3136,
            886.2308,
            892.4588,
            899.0816,
            905.4076,
            912.0064,
            917.3878,
            923.619,
            929.998,
            937.3482,
            943.9506,
            947.991,
            955.1144,
            962.203,
            968.8222,
            975.7324,
            981.7826,
            988.7666,
            994.2648,
            1000.3128,
            1007.4082,
            1013.7536,
            1020.3376,
            1026.7156,
            1031.7478,
            1037.4292,
            1045.393,
            1051.2278,
            1058.3434,
            1062.8726,
            1071.884,
            1076.806,
            1082.9176,
            1089.1678,
            1095.5032,
            1102.525,
            1107.2264,
            1115.315,
            1120.93,
            1127.252,
            1134.1496,
            1139.0408,
            1147.5448,
            1153.3296,
            1158.1974,
            1166.5262,
            1174.3328,
            1175.657,
            1184.4222,
            1190.9172,
            1197.1292,
            1204.4606,
            1210.4578,
            1218.8728,
            1225.3336,
            1226.6592,
            1236.5768,
            1241.363,
            1249.4074,
            1254.6566,
            1260.8014,
            1266.5454,
            1274.5192, },
        // precision 9
        {
            369,
            374.8294,
            381.2452,
            387.6698,
            394.1464,
            400.2024,
            406.8782,
            413.6598,
            420.462,
            427.2826,
            433.7102,
            440.7416,
            447.9366,
            455.1046,
            462.285,
            469.0668,
            476.306,
            483.8448,
            491.301,
            498.9886,
            506.2422,
            513.8138,
            521.7074,
            529.7428,
            537.8402,
            545.1664,
            553.3534,
            561.594,
            569.6886,
            577.7876,
            585.65,
            594.228,
            602.8036,
            611.1666,
            620.0818,
            628.0824,
            637.2574,
            646.302,
            655.1644,
            664.0056,
            672.3802,
            681.7192,
            690.5234,
            700.2084,
            708.831,
            718.485,
            728.1112,
            737.4764,
            746.76,
            756.3368,
            766.5538,
            775.5058,
            785.2646,
            795.5902,
            804.3818,
            814.8998,
            824.9532,
            835.2062,
            845.2798,
            854.4728,
            864.9582,
            875.3292,
            886.171,
            896.781,
            906.5716,
            916.7048,
            927.5322,
            937.875,
            949.3972,
            958.3464,
            969.7274,
            980.2834,
            992.1444,
            1003.4264,
            1013.0166,
            1024.018,
            1035.0438,
            1046.34,
            1057.6856,
            1068.9836,
            1079.0312,
            1091.677,
            1102.3188,
            1113.4846,
            1124.4424,
            1135.739,
            1147.1488,
            1158.9202,
            1169.406,
            1181.5342,
            1193.2834,
            1203.8954,
            1216.3286,
            1226.2146,
            1239.6684,
            1251.9946,
            1262.123,
            1275.4338,
            1285.7378,
            1296.076,
            1308.9692,
            1320.4964,
            1333.0998,
            1343.9864,
            1357.7754,
            1368.3208,
            1380.4838,
            1392.7388,
            1406.0758,
            1416.9098,
            1428.9728,
            1440.9228,
            1453.9292,
            1462.617,
            1476.05,
            1490.2996,
            1500.6128,
            1513.7392,
            1524.5174,
            1536.6322,
            1548.2584,
            1562.3766,
            1572.423,
            1587.1232,
            1596.5164,
            1610.5938,
            1622.5972,
            1633.1222,
            1647.7674,
            1658.5044,
            1671.57,
            1683.7044,
            1695.4142,
            1708.7102,
            1720.6094,
            1732.6522,
            1747.841,
            1756.4072,
            1769.9786,
            1782.3276,
            1797.5216,
            1808.3186,
            1819.0694,
            1834.354,
            1844.575,
            1856.2808,
            1871.1288,
            1880.7852,
            1893.9622,
            1906.3418,
            1920.6548,
            1932.9302,
            1945.8584,
            1955.473,
            1968.8248,
            1980.6446,
            1995.9598,
            2008.349,
            2019.8556,
            2033.0334,
            2044.0206,
            2059.3956,
            2069.9174,
            2082.6084,
            2093.7036,
            2106.6108,
            2118.9124,
            2132.301,
            2144.7628,
            2159.8422,
            2171.0212,
            2183.101,
            2193.5112,
            2208.052,
            2221.3194,
            2233.3282,
            2247.295,
            2257.7222,
            2273.342,
            2286.5638,
            2299.6786,
            2310.8114,
            2322.3312,
            2335.516,
            2349.874,
            2363.5968,
            2373.865,
            2387.1918,
            2401.8328,
            2414.8496,
            2424.544,
            2436.7592,
            2447.1682,
            2464.1958,
            2474.3438,
            2489.0006,
            2497.4526,
            2513.6586,
            2527.19,
            2540.7028,
            2553.768, },
        // precision 10
        {
            738.1256,
            750.4234,
            763.1064,
            775.4732,
            788.4636,
            801.0644,
            814.488,
            827.9654,
            841.0832,
            854.7864,
            868.1992,
            882.2176,
            896.5228,
            910.1716,
            924.7752,
            938.899,
            953.6126,
            968.6492,
            982.9474,
            998.5214,
            1013.1064,
            1028.6364,
            1044.2468,
            1059.4588,
            1075.3832,
            1091.0584,
            1106.8606,
            1123.3868,
            1139.5062,
            1156.1862,
            1172.463,
            1189.339,
            1206.1936,
            1223.1292,
            1240.1854,
            1257.2908,
            1275.3324,
            1292.8518,
            1310.5204,
            1328.4854,
            1345.9318,
            1364.552,
            1381.4658,
            1400.4256,
            1419.849,
            1438.152,
            1456.8956,
            1474.8792,
            1494.118,
            1513.62,
            1532.5132,
            1551.9322,
            1570.7726,
            1590.6086,
            1610.5332,
            1630.5918,
            1650.4294,
            1669.7662,
            1690.4106,
            1710.7338,
            1730.9012,
            1750.4486,
            1770.1556,
            1791.6338,
            1812.7312,
            1833.6264,
            1853.9526,
            1874.8742,
            1896.8326,
            1918.1966,
            1939.5594,
            1961.07,
            1983.037,
            2003.1804,
            2026.071,
            2047.4884,
            2070.0848,
            2091.2944,
            2114.333,
            2135.9626,
            2158.2902,
            2181.0814,
            2202.0334,
            2224.4832,
            2246.39,
            2269.7202,
            2292.1714,
            2314.2358,
            2338.9346,
            2360.891,
            2384.0264,
            2408.3834,
            2430.1544,
            2454.8684,
            2476.9896,
            2501.4368,
            2522.8702,
            2548.0408,
            2570.6738,
            2593.5208,
            2617.0158,
            2640.2302,
            2664.0962,
            2687.4986,
            2714.2588,
            2735.3914,
            2759.6244,
            2781.8378,
            2808.0072,
            2830.6516,
            2856.2454,
            2877.2136,
            2903.4546,
            2926.785,
            2951.2294,
            2976.468,
            3000.867,
            3023.6508,
            3049.91,
            3073.5984,
            3098.162,
            3121.5564,
            3146.2328,
            3170.9484,
            3195.5902,
            3221.3346,
            3242.7032,
            3271.6112,
            3296.5546,
            3317.7376,
            3345.072,
            3369.9518,
            3394.326,
            3418.1818,
            3444.6926,
            3469.086,
            3494.2754,
            3517.8698,
            3544.248,
            3565.3768,
            3588.7234,
            3616.979,
            3643.7504,
            3668.6812,
            3695.72,
            3719.7392,
            3742.6224,
            3770.4456,
            3795.6602,
            3819.9058,
            3844.002,
            3869.517,
            3895.6824,
            3920.8622,
            3947.1364,
            3973.985,
            3995.4772,
            4021.62,
            4046.628,
            4074.65,
            4096.2256,
            4121.831,
            4146.6406,
            4173.276,
            4195.0744,
            4223.9696,
            4251.3708,
            4272.9966,
            4300.8046,
            4326.302,
            4353.1248,
            4374.312,
            4403.0322,
            4426.819,
            4450.0598,
            4478.5206,
            4504.8116,
            4528.8928,
            4553.9584,
            4578.8712,
            4603.8384,
            4632.3872,
            4655.5128,
            4675.821,
            4704.6222,
            4731.9862,
            4755.4174,
            4781.2628,
            4804.332,
            4832.3048,
            4862.8752,
            4883.4148,
            4906.9544,
            4935.3516,
            4954.3532,
            4984.0248,
            5011.217,
            5035.3258,
            5057.3672,
            5084.1828, },
        // precision 11
        {
            1477,
            1501.6014,
            1526.5802,
            1551.7942,
            1577.3042,
            1603.2062,
            1629.8402,
            1656.2292,
            1682.9462,
            1709.9926,
            1737.3026,
            1765.4252,
            1793.0578,
            1821.6092,
            1849.626,
            1878.5568,
            1908.527,
            1937.5154,
            1967.1874,
            1997.3878,
            2027.37,
            2058.1972,
            2089.5728,
            2120.1012,
            2151.9668,
            2183.292,
            2216.0772,
            2247.8578,
            2280.6562,
            2313.041,
            2345.714,
            2380.3112,
            2414.1806,
            2447.9854,
            2481.656,
            2516.346,
            2551.5154,
            2586.8378,
            2621.7448,
            2656.6722,
            2693.5722,
            2729.1462,
            2765.4124,
            2802.8728,
            2838.898,
            2876.408,
            2913.4926,
            2951.4938,
            2989.6776,
            3026.282,
            3065.7704,
            3104.1012,
            3143.7388,
            3181.6876,
            3221.1872,
            3261.5048,
            3300.0214,
            3339.806,
            3381.409,
            3421.4144,
            3461.4294,
            3502.2286,
            3544.651,
            3586.6156,
            3627.337,
            3670.083,
            3711.1538,
            3753.5094,
            3797.01,
            3838.6686,
            3882.1678,
            3922.8116,
            3967.9978,
            4009.9204,
            4054.3286,
            4097.5706,
            4140.6014,
            4185.544,
            4229.5976,
            4274.583,
            4316.9438,
            4361.672,
            4406.2786,
            4451.8628,
            4496.1834,
            4543.505,
            4589.1816,
            4632.5188,
            4678.2294,
            4724.8908,
            4769.0194,
            4817.052,
            4861.4588,
            4910.1596,
            4956.4344,
            5002.5238,
            5048.13,
            5093.6374,
            5142.8162,
            5187.7894,
            5237.3984,
            5285.6078,
            5331.0858,
            5379.1036,
            5428.6258,
            5474.6018,
            5522.7618,
            5571.5822,
            5618.59,
            5667.9992,
            5714.88,
            5763.454,
            5808.6982,
            5860.3644,
            5910.2914,
            5953.571,
            6005.9232,
            6055.1914,
            6104.5882,
            6154.5702,
            6199.7036,
            6251.1764,
            6298.7596,
            6350.0302,
            6398.061,
            6448.4694,
            6495.933,
            6548.0474,
            6597.7166,
            6646.9416,
            6695.9208,
            6742.6328,
            6793.5276,
            6842.1934,
            6894.2372,
            6945.3864,
            6996.9228,
            7044.2372,
            7094.1374,
            7142.2272,
            7192.2942,
            7238.8338,
            7288.9006,
            7344.0908,
            7394.8544,
            7443.5176,
            7490.4148,
            7542.9314,
            7595.6738,
            7641.9878,
            7694.3688,
            7743.0448,
            7797.522,
            7845.53,
            7899.594,
            7950.3132,
            7996.455,
            8050.9442,
            8092.9114,
            8153.1374,
            8197.4472,
            8252.8278,
            8301.8728,
            8348.6776,
            8401.4698,
            8453.551,
            8504.6598,
            8553.8944,
            8604.1276,
            8657.6514,
            8710.3062,
            8758.908,
            8807.8706,
            8862.1702,
            8910.4668,
            8960.77,
            9007.2766,
            9063.164,
            9121.0534,
            9164.1354,
            9218.1594,
            9267.767,
            9319.0594,
            9372.155,
            9419.7126,
            9474.3722,
            9520.1338,
            9572.368,
            9622.7702,
            9675.8448,
            9726.5396,
            9778.7378,
            9827.6554,
            9878.1922,
            9928.7782,
            9978.3984,
            10026.578,
            10076.5626,
            10137.1618,
            10177.5244,
            10229.9176, },
        // precision 12
        {
            2954,
            3003.4782,
            3053.3568,
            3104.3666,
            3155.324,
            3206.9598,
            3259.648,
            3312.539,
            3366.1474,
            3420.2576,
            3474.8376,
            3530.6076,
            3586.451,
            3643.38,
            3700.4104,
            3757.5638,
            3815.9676,
            3875.193,
            3934.838,
            3994.8548,
            4055.018,
            4117.1742,
            4178.4482,
            4241.1294,
            4304.4776,
            4367.4044,
            4431.8724,
            4496.3732,
            4561.4304,
            4627.5326,
            4693.949,
            4761.5532,
            4828.7256,
            4897.6182,
            4965.5186,
            5034.4528,
            5104.865,
            5174.7164,
            5244.6828,
            5316.6708,
            5387.8312,
            5459.9036,
            5532.476,
            5604.8652,
            5679.6718,
            5753.757,
            5830.2072,
            5905.2828,
            5980.0434,
            6056.6264,
            6134.3192,
            6211.5746,
            6290.0816,
            6367.1176,
            6447.9796,
            6526.5576,
            6606.1858,
            6686.9144,
            6766.1142,
            6847.0818,
            6927.9664,
            7010.9096,
            7091.0816,
            7175.3962,
            7260.3454,
            7344.018,
            7426.4214,
            7511.3106,
            7596.0686,
            7679.8094,
            7765.818,
            7852.4248,
            7936.834,
            8022.363,
            8109.5066,
            8200.4554,
            8288.5832,
            8373.366,
            8463.4808,
            8549.7682,
            8642.0522,
            8728.3288,
            8820.9528,
            8907.727,
            9001.0794,
            9091.2522,
            9179.988,
            9269.852,
            9362.6394,
            9453.642,
            9546.9024,
            9640.6616,
            9732.6622,
            9824.3254,
            9917.7484,
            10007.9392,
            10106.7508,
            10196.2152,
            10289.8114,
            10383.5494,
            10482.3064,
            10576.8734,
            10668.7872,
            10764.7156,
            10862.0196,
            10952.793,
            11049.9748,
            11146.0702,
            11241.4492,
            11339.2772,
            11434.2336,
            11530.741,
            11627.6136,
            11726.311,
            11821.5964,
            11918.837,
            12015.3724,
            12113.0162,
            12213.0424,
            12306.9804,
            12408.4518,
            12504.8968,
            12604.586,
            12700.9332,
            12798.705,
            12898.5142,
            12997.0488,
            13094.788,
            13198.475,
            13292.7764,
            13392.9698,
            13486.8574,
            13590.1616,
            13686.5838,
            13783.6264,
            13887.2638,
            13992.0978,
            14081.0844,
            14189.9956,
            14280.0912,
            14382.4956,
            14486.4384,
            14588.1082,
            14686.2392,
            14782.276,
            14888.0284,
            14985.1864,
            15088.8596,
            15187.0998,
            15285.027,
            15383.6694,
            15495.8266,
            15591.3736,
            15694.2008,
            15790.3246,
            15898.4116,
            15997.4522,
            16095.5014,
            16198.8514,
            16291.7492,
            16402.6424,
            16499.1266,
            16606.2436,
            16697.7186,
            16796.3946,
            16902.3376,
            17005.7672,
            17100.814,
            17206.8282,
            17305.8262,
            17416.0744,
            17508.4092,
            17617.0178,
            17715.4554,
            17816.758,
            17920.1748,
            18012.9236,
            18119.7984,
            18223.2248,
            18324.2482,
            18426.6276,
            18525.0932,
            18629.8976,
            18733.2588,
            18831.0466,
            18940.1366,
            19032.2696,
            19131.729,
            19243.4864,
            19349.6932,
            19442.866,
            19547.9448,
            19653.2798,
            19754.4034,
            19854.0692,
            19965.1224,
            20065.1774,
            20158.2212,
            20253.353,
            20366.3264,
            20463.22, },
        // precision 13
        {
            5908.5052,
            6007.2672,
            6107.347,
            6208.5794,
            6311.2622,
            6414.5514,
            6519.3376,
            6625.6952,
            6732.5988,
            6841.3552,
            6950.5972,
            7061.3082,
            7173.5646,
            7287.109,
            7401.8216,
            7516.4344,
            7633.3802,
            7751.2962,
            7870.3784,
            7990.292,
            8110.79,
            8233.4574,
            8356.6036,
            8482.2712,
            8607.7708,
            8735.099,
            8863.1858,
            8993.4746,
            9123.8496,
            9255.6794,
            9388.5448,
            9522.7516,
            9657.3106,
            9792.6094,
            9930.5642,
            10068.794,
            10206.7256,
            10347.81,
            10490.3196,
            10632.0778,
            10775.9916,
            10920.4662,
            11066.124,
            11213.073,
            11358.0362,
            11508.1006,
            11659.1716,
            11808.7514,
            11959.4884,
            12112.1314,
            12265.037,
            12420.3756,
            12578.933,
            12734.311,
            12890.0006,
            13047.2144,
            13207.3096,
            13368.5144,
            13528.024,
            13689.847,
            13852.7528,
            14018.3168,
            14180.5372,
            14346.9668,
            14513.5074,
            14677.867,
            14846.2186,
            15017.4186,
            15184.9716,
            15356.339,
            15529.2972,
            15697.3578,
            15871.8686,
            16042.187,
            16216.4094,
            16389.4188,
            16565.9126,
            16742.3272,
            16919.0042,
            17094.7592,
            17273.965,
            17451.8342,
            17634.4254,
            17810.5984,
            17988.9242,
            18171.051,
            18354.7938,
            18539.466,
            18721.0408,
            18904.9972,
            19081.867,
            19271.9118,
            19451.8694,
            19637.9816,
            19821.2922,
            20013.1292,
            20199.3858,
            20387.8726,
            20572.9514,
            20770.7764,
            20955.1714,
            21144.751,
            21329.9952,
            21520.709,
            21712.7016,
            21906.3868,
            22096.2626,
            22286.0524,
            22475.051,
            22665.5098,
            22862.8492,
            23055.5294,
            23249.6138,
            23437.848,
            23636.273,
            23826.093,
            24020.3296,
            24213.3896,
            24411.7392,
            24602.9614,
            24805.7952,
            24998.1552,
            25193.9588,
            25389.0166,
            25585.8392,
            25780.6976,
            25981.2728,
            26175.977,
            26376.5252,
            26570.1964,
            26773.387,
            26962.9812,
            27163.0586,
            27368.164,
            27565.0534,
            27758.7428,
            27961.1276,
            28163.2324,
            28362.3816,
            28565.7668,
            28758.644,
            28956.9768,
            29163.4722,
            29354.7026,
            29561.1186,
            29767.9948,
            29959.9986,
            30164.0492,
            30366.9818,
            30562.5338,
            30762.9928,
            30976.1592,
            31166.274,
            31376.722,
            31570.3734,
            31770.809,
            31974.8934,
            32179.5286,
            32387.5442,
            32582.3504,
            32794.076,
            32989.9528,
            33191.842,
            33392.4684,
            33595.659,
            33801.8672,
            34000.3414,
            34200.0922,
            34402.6792,
            34610.0638,
            34804.0084,
            35011.13,
            35218.669,
            35418.6634,
            35619.0792,
            35830.6534,
            36028.4966,
            36229.7902,
            36438.6422,
            36630.7764,
            36833.3102,
            37048.6728,
            37247.3916,
            37453.5904,
            37669.3614,
            37854.5526,
            38059.305,
            38268.0936,
            38470.2516,
            38674.7064,
            38876.167,
            39068.3794,
            39281.9144,
            39492.8566,
            39684.8628,
            39898.4108,
            40093.1836,
            40297.6858,
            40489.7086,
            40717.2424, },
        // precision 14
        {
            11817.475,
            12015.0046,
            12215.3792,
            12417.7504,
            12623.1814,
            12830.0086,
            13040.0072,
            13252.503,
            13466.178,
            13683.2738,
            13902.0344,
            14123.9798,
            14347.394,
            14573.7784,
            14802.6894,
            15033.6824,
            15266.9134,
            15502.8624,
            15741.4944,
            15980.7956,
            16223.8916,
            16468.6316,
            16715.733,
            16965.5726,
            17217.204,
            17470.666,
            17727.8516,
            17986.7886,
            18247.6902,
            18510.9632,
            18775.304,
            19044.7486,
            19314.4408,
            19587.202,
            19862.2576,
            20135.924,
            20417.0324,
            20697.9788,
            20979.6112,
            21265.0274,
            21550.723,
            21841.6906,
            22132.162,
            22428.1406,
            22722.127,
            23020.5606,
            23319.7394,
            23620.4014,
            23925.2728,
            24226.9224,
            24535.581,
            24845.505,
            25155.9618,
            25470.3828,
            25785.9702,
            26103.7764,
            26420.4132,
            26742.0186,
            27062.8852,
            27388.415,
            27714.6024,
            28042.296,
            28365.4494,
            28701.1526,
            29031.8008,
            29364.2156,
            29704.497,
            30037.1458,
            30380.111,
            30723.8168,
            31059.5114,
            31404.9498,
            31751.6752,
            32095.2686,
            32444.7792,
            32794.767,
            33145.204,
            33498.4226,
            33847.6502,
            34209.006,
            34560.849,
            34919.4838,
            35274.9778,
            35635.1322,
            35996.3266,
            36359.1394,
            36722.8266,
            37082.8516,
            37447.7354,
            37815.9606,
            38191.0692,
            38559.4106,
            38924.8112,
            39294.6726,
            39663.973,
            40042.261,
            40416.2036,
            40779.2036,
            41161.6436,
            41540.9014,
            41921.1998,
            42294.7698,
            42678.5264,
            43061.3464,
            43432.375,
            43818.432,
            44198.6598,
            44583.0138,
            44970.4794,
            45353.924,
            45729.858,
            46118.2224,
            46511.5724,
            46900.7386,
            47280.6964,
            47668.1472,
            48055.6796,
            48446.9436,
            48838.7146,
            49217.7296,
            49613.7796,
            50010.7508,
            50410.0208,
            50793.7886,
            51190.2456,
            51583.1882,
            51971.0796,
            52376.5338,
            52763.319,
            53165.5534,
            53556.5594,
            53948.2702,
            54346.352,
            54748.7914,
            55138.577,
            55543.4824,
            55941.1748,
            56333.7746,
            56745.1552,
            57142.7944,
            57545.2236,
            57935.9956,
            58348.5268,
            58737.5474,
            59158.5962,
            59542.6896,
            59958.8004,
            60349.3788,
            60755.0212,
            61147.6144,
            61548.194,
            61946.0696,
            62348.6042,
            62763.603,
            63162.781,
            63560.635,
            63974.3482,
            64366.4908,
            64771.5876,
            65176.7346,
            65597.3916,
            65995.915,
            66394.0384,
            66822.9396,
            67203.6336,
            67612.2032,
            68019.0078,
            68420.0388,
            68821.22,
            69235.8388,
            69640.0724,
            70055.155,
            70466.357,
            70863.4266,
            71276.2482,
            71677.0306,
            72080.2006,
            72493.0214,
            72893.5952,
            73314.5856,
            73714.9852,
            74125.3022,
            74521.2122,
            74933.6814,
            75341.5904,
            75743.0244,
            76166.0278,
            76572.1322,
            76973.1028,
            77381.6284,
            77800.6092,
            78189.328,
            78607.0962,
            79012.2508,
            79407.8358,
            79825.725,
            80238.701,
            80646.891,
            81035.6436,
            81460.0448,
            81876.3884, },
        // precision 15
        {
            23635.0036,
            24030.8034,
            24431.4744,
            24837.1524,
            25246.7928,
            25661.326,
            26081.3532,
            26505.2806,
            26933.9892,
            27367.7098,
            27805.318,
            28248.799,
            28696.4382,
            29148.8244,
            29605.5138,
            30066.8668,
            30534.2344,
            31006.32,
            31480.778,
            31962.2418,
            32447.3324,
            32938.0232,
            33432.731,
            33930.728,
            34433.9896,
            34944.1402,
            35457.5588,
            35974.5958,
            36497.3296,
            37021.9096,
            37554.326,
            38088.0826,
            38628.8816,
            39171.3192,
            39723.2326,
            40274.5554,
            40832.3142,
            41390.613,
            41959.5908,
            42532.5466,
            43102.0344,
            43683.5072,
            44266.694,
            44851.2822,
            45440.7862,
            46038.0586,
            46640.3164,
            47241.064,
            47846.155,
            48454.7396,
            49076.9168,
            49692.542,
            50317.4778,
            50939.65,
            51572.5596,
            52210.2906,
            52843.7396,
            53481.3996,
            54127.236,
            54770.406,
            55422.6598,
            56078.7958,
            56736.7174,
            57397.6784,
            58064.5784,
            58730.308,
            59404.9784,
            60077.0864,
            60751.9158,
            61444.1386,
            62115.817,
            62808.7742,
            63501.4774,
            64187.5454,
            64883.6622,
            65582.7468,
            66274.5318,
            66976.9276,
            67688.7764,
            68402.138,
            69109.6274,
            69822.9706,
            70543.6108,
            71265.5202,
            71983.3848,
            72708.4656,
            73433.384,
            74158.4664,
            74896.4868,
            75620.9564,
            76362.1434,
            77098.3204,
            77835.7662,
            78582.6114,
            79323.9902,
            80067.8658,
            80814.9246,
            81567.0136,
            82310.8536,
            83061.9952,
            83821.4096,
            84580.8608,
            85335.547,
            86092.5802,
            86851.6506,
            87612.311,
            88381.2016,
            89146.3296,
            89907.8974,
            90676.846,
            91451.4152,
            92224.5518,
            92995.8686,
            93763.5066,
            94551.2796,
            95315.1944,
            96096.1806,
            96881.0918,
            97665.679,
            98442.68,
            99229.3002,
            100011.0994,
            100790.6386,
            101580.1564,
            102377.7484,
            103152.1392,
            103944.2712,
            104730.216,
            105528.6336,
            106324.9398,
            107117.6706,
            107890.3988,
            108695.2266,
            109485.238,
            110294.7876,
            111075.0958,
            111878.0496,
            112695.2864,
            113464.5486,
            114270.0474,
            115068.608,
            115884.3626,
            116673.2588,
            117483.3716,
            118275.097,
            119085.4092,
            119879.2808,
            120687.5868,
            121499.9944,
            122284.916,
            123095.9254,
            123912.5038,
            124709.0454,
            125503.7182,
            126323.259,
            127138.9412,
            127943.8294,
            128755.646,
            129556.5354,
            130375.3298,
            131161.4734,
            131971.1962,
            132787.5458,
            133588.1056,
            134431.351,
            135220.2906,
            136023.398,
            136846.6558,
            137667.0004,
            138463.663,
            139283.7154,
            140074.6146,
            140901.3072,
            141721.8548,
            142543.2322,
            143356.1096,
            144173.7412,
            144973.0948,
            145794.3162,
            146609.5714,
            147420.003,
            148237.9784,
            149050.5696,
            149854.761,
            150663.1966,
            151494.0754,
            152313.1416,
            153112.6902,
            153935.7206,
            154746.9262,
            155559.547,
            156401.9746,
            157228.7036,
            158008.7254,
            158820.75,
            159646.9184,
            160470.4458,
            161279.5348,
            162093.3114,
            162918.542,
            163729.2842, },
        // precision 16
        {
            47271,
            48062.3584,
            48862.7074,
            49673.152,
            50492.8416,
            51322.9514,
            52161.03,
            53009.407,
            53867.6348,
            54734.206,
            55610.5144,
            56496.2096,
            57390.795,
            58297.268,
            59210.6448,
            60134.665,
            61068.0248,
            62010.4472,
            62962.5204,
            63923.5742,
            64895.0194,
            65876.4182,
            66862.6136,
            67862.6968,
            68868.8908,
            69882.8544,
            70911.271,
            71944.0924,
            72990.0326,
            74040.692,
            75100.6336,
            76174.7826,
            77252.5998,
            78340.2974,
            79438.2572,
            80545.4976,
            81657.2796,
            82784.6336,
            83915.515,
            85059.7362,
            86205.9368,
            87364.4424,
            88530.3358,
            89707.3744,
            90885.9638,
            92080.197,
            93275.5738,
            94479.391,
            95695.918,
            96919.2236,
            98148.4602,
            99382.3474,
            100625.6974,
            101878.0284,
            103141.6278,
            104409.4588,
            105686.2882,
            106967.5402,
            108261.6032,
            109548.1578,
            110852.0728,
            112162.231,
            113479.0072,
            114806.2626,
            116137.9072,
            117469.5048,
            118813.5186,
            120165.4876,
            121516.2556,
            122875.766,
            124250.5444,
            125621.2222,
            127003.2352,
            128387.848,
            129775.2644,
            131181.7776,
            132577.3086,
            133979.9458,
            135394.1132,
            136800.9078,
            138233.217,
            139668.5308,
            141085.212,
            142535.2122,
            143969.0684,
            145420.2872,
            146878.1542,
            148332.7572,
            149800.3202,
            151269.66,
            152743.6104,
            154213.0948,
            155690.288,
            157169.4246,
            158672.1756,
            160160.059,
            161650.6854,
            163145.7772,
            164645.6726,
            166159.1952,
            167682.1578,
            169177.3328,
            170700.0118,
            172228.8964,
            173732.6664,
            175265.5556,
            176787.799,
            178317.111,
            179856.6914,
            181400.865,
            182943.4612,
            184486.742,
            186033.4698,
            187583.7886,
            189148.1868,
            190688.4526,
            192250.1926,
            193810.9042,
            195354.2972,
            196938.7682,
            198493.5898,
            200079.2824,
            201618.912,
            203205.5492,
            204765.5798,
            206356.1124,
            207929.3064,
            209498.7196,
            211086.229,
            212675.1324,
            214256.7892,
            215826.2392,
            217412.8474,
            218995.6724,
            220618.6038,
            222207.1166,
            223781.0364,
            225387.4332,
            227005.7928,
            228590.4336,
            230217.8738,
            231805.1054,
            233408.9,
            234995.3432,
            236601.4956,
            238190.7904,
            239817.2548,
            241411.2832,
            243002.4066,
            244640.1884,
            246255.3128,
            247849.3508,
            249479.9734,
            251106.8822,
            252705.027,
            254332.9242,
            255935.129,
            257526.9014,
            259154.772,
            260777.625,
            262390.253,
            264004.4906,
            265643.59,
            267255.4076,
            268873.426,
            270470.7252,
            272106.4804,
            273722.4456,
            275337.794,
            276945.7038,
            278592.9154,
            280204.3726,
            281841.1606,
            283489.171,
            285130.1716,
            286735.3362,
            288364.7164,
            289961.1814,
            291595.5524,
            293285.683,
            294899.6668,
            296499.3434,
            298128.0462,
            299761.8946,
            301394.2424,
            302997.6748,
            304615.1478,
            306269.7724,
            307886.114,
            309543.1028,
            311153.2862,
            312782.8546,
            314421.2008,
            316033.2438,
            317692.9636,
            319305.2648,
            320948.7406,
            322566.3364,
            324228.4224,
            325847.1542, },
        // precision 17
        {
            94542,
            96125.811,
            97728.019,
            99348.558,
            100987.9705,
            102646.7565,
            104324.5125,
            106021.7435,
            107736.7865,
            109469.272,
            111223.9465,
            112995.219,
            114787.432,
            116593.152,
            118422.71,
            120267.2345,
            122134.6765,
            124020.937,
            125927.2705,
            127851.255,
            129788.9485,
            131751.016,
            133726.8225,
            135722.592,
            137736.789,
            139770.568,
            141821.518,
            143891.343,
            145982.1415,
            148095.387,
            150207.526,
            152355.649,
            154515.6415,
            156696.05,
            158887.7575,
            161098.159,
            163329.852,
            165569.053,
            167837.4005,
            170121.6165,
            172420.4595,
            174732.6265,
            177062.77,
            179412.502,
            181774.035,
            184151.939,
            186551.6895,
            188965.691,
            191402.8095,
            193857.949,
            196305.0775,
            198774.6715,
            201271.2585,
            203764.78,
            206299.3695,
            208818.1365,
            211373.115,
            213946.7465,
            216532.076,
            219105.541,
            221714.5375,
            224337.5135,
            226977.5125,
            229613.0655,
            232270.2685,
            234952.2065,
            237645.3555,
            240331.1925,
            243034.517,
            245756.0725,
            248517.6865,
            251232.737,
            254011.3955,
            256785.995,
            259556.44,
            262368.335,
            265156.911,
            267965.266,
            270785.583,
            273616.0495,
            276487.4835,
            279346.639,
            282202.509,
            285074.3885,
            287942.2855,
            290856.018,
            293774.0345,
            296678.5145,
            299603.6355,
            302552.6575,
            305492.9785,
            308466.8605,
            311392.581,
            314347.538,
            317319.4295,
            320285.9785,
            323301.7325,
            326298.3235,
            329301.3105,
            332301.987,
            335309.791,
            338370.762,
            341382.923,
            344431.1265,
            347464.1545,
            350507.28,
            353619.2345,
            356631.2005,
            359685.203,
            362776.7845,
            365886.488,
            368958.2255,
            372060.6825,
            375165.4335,
            378237.935,
            381328.311,
            384430.5225,
            387576.425,
            390683.242,
            393839.648,
            396977.8425,
            400101.9805,
            403271.296,
            406409.8425,
            409529.5485,
            412678.7,
            415847.423,
            419020.8035,
            422157.081,
            425337.749,
            428479.6165,
            431700.902,
            434893.1915,
            438049.582,
            441210.5415,
            444379.2545,
            447577.356,
            450741.931,
            453959.548,
            457137.0935,
            460329.846,
            463537.4815,
            466732.3345,
            469960.5615,
            473164.681,
            476347.6345,
            479496.173,
            482813.1645,
            486025.6995,
            489249.4885,
            492460.1945,
            495675.8805,
            498908.0075,
            502131.802,
            505374.3855,
            508550.9915,
            511806.7305,
            515026.776,
            518217.0005,
            521523.9855,
            524705.9855,
            527950.997,
            531210.0265,
            534472.497,
            537750.7315,
            540926.922,
            544207.094,
            547429.4345,
            550666.3745,
            553975.3475,
            557150.7185,
            560399.6165,
            563662.697,
            566916.7395,
            570146.1215,
            573447.425,
            576689.6245,
            579874.5745,
            583202.337,
            586503.0255,
            589715.635,
            592910.161,
            596214.3885,
            599488.035,
            602740.92,
            605983.0685,
            609248.67,
            612491.3605,
            615787.912,
            619107.5245,
            622307.9555,
            625577.333,
            628840.4385,
            632085.2155,
            635317.6135,
            638691.7195,
            641887.467,
            645139.9405,
            648441.546,
            651666.252,
            654941.845, },
        // precision 18
        {
            189084,
            192250.913,
            195456.774,
            198696.946,
            201977.762,
            205294.444,
            208651.754,
            212042.099,
            215472.269,
            218941.91,
            222443.912,
            225996.845,
            229568.199,
            233193.568,
            236844.457,
            240543.233,
            244279.475,
            248044.27,
            251854.588,
            255693.2,
            259583.619,
            263494.621,
            267445.385,
            271454.061,
            275468.769,
            279549.456,
            283646.446,
            287788.198,
            291966.099,
            296181.164,
            300431.469,
            304718.618,
            309024.004,
            313393.508,
            317760.803,
            322209.731,
            326675.061,
            331160.627,
            335654.47,
            340241.442,
            344841.833,
            349467.132,
            354130.629,
            358819.432,
            363574.626,
            368296.587,
            373118.482,
            377914.93,
            382782.301,
            387680.669,
            392601.981,
            397544.323,
            402529.115,
            407546.018,
            412593.658,
            417638.657,
            422762.865,
            427886.169,
            433017.167,
            438213.273,
            443441.254,
            448692.421,
            453937.533,
            459239.049,
            464529.569,
            469910.083,
            475274.03,
            480684.473,
            486070.26,
            491515.237,
            496995.651,
            502476.617,
            507973.609,
            513497.19,
            519083.233,
            524726.509,
            530305.505,
            535945.728,
            541584.404,
            547274.055,
            552967.236,
            558667.862,
            564360.216,
            570128.148,
            575965.08,
            581701.952,
            587532.523,
            593361.144,
            599246.128,
            605033.418,
            610958.779,
            616837.117,
            622772.818,
            628672.04,
            634675.369,
            640574.831,
            646585.739,
            652574.547,
            658611.217,
            664642.684,
            670713.914,
            676737.681,
            682797.313,
            688837.897,
            694917.874,
            701009.882,
            707173.648,
            713257.254,
            719415.392,
            725636.761,
            731710.697,
            737906.209,
            744103.074,
            750313.39,
            756504.185,
            762712.579,
            768876.985,
            775167.859,
            781359,
            787615.959,
            793863.597,
            800245.477,
            806464.582,
            812785.294,
            819005.925,
            825403.057,
            831676.197,
            837936.284,
            844266.968,
            850642.711,
            856959.756,
            863322.774,
            869699.931,
            876102.478,
            882355.787,
            888694.463,
            895159.952,
            901536.143,
            907872.631,
            914293.672,
            920615.14,
            927130.974,
            933409.404,
            939922.178,
            946331.47,
            952745.93,
            959209.264,
            965590.224,
            972077.284,
            978501.961,
            984953.19,
            991413.271,
            997817.479,
            1004222.658,
            1010725.676,
            1017177.138,
            1023612.529,
            1030098.236,
            1036493.719,
            1043112.207,
            1049537.036,
            1056008.096,
            1062476.184,
            1068942.337,
            1075524.95,
            1081932.864,
            1088426.025,
            1094776.005,
            1101327.448,
            1107901.673,
            1114423.639,
            1120884.602,
            1127324.923,
            1133794.24,
            1140328.886,
            1146849.376,
            1153346.682,
            1159836.502,
            1166478.703,
            1172953.304,
            1179391.502,
            1185950.982,
            1192544.052,
            1198913.41,
            1205430.994,
            1212015.525,
            1218674.042,
            1225121.683,
            1231551.101,
            1238126.379,
            1244673.795,
            1251260.649,
            1257697.86,
            1264320.983,
            1270736.319,
            1277274.694,
            1283804.95,
            1290211.514,
            1296858.568,
            1303455.691, } };

    private static final double[][] BIAS_DATA = {
        // precision 4
        {
            10,
            9.717,
            9.207,
            8.7896,
            8.2882,
            7.8204,
            7.3772,
            6.9342,
            6.5202,
            6.161,
            5.7722,
            5.4636,
            5.0396,
            4.6766,
            4.3566,
            4.0454,
            3.7936,
            3.4856,
            3.2666,
            2.9946,
            2.766,
            2.4692,
            2.3638,
            2.0764,
            1.7864,
            1.7602,
            1.4814,
            1.433,
            1.2926,
            1.0664,
            0.999600000000001,
            0.7956,
            0.5366,
            0.589399999999998,
            0.573799999999999,
            0.269799999999996,
            0.368200000000002,
            0.0544000000000011,
            0.234200000000001,
            0.0108000000000033,
            -0.203400000000002,
            -0.0701999999999998,
            -0.129600000000003,
            -0.364199999999997,
            -0.480600000000003,
            -0.226999999999997,
            -0.322800000000001,
            -0.382599999999996,
            -0.511200000000002,
            -0.669600000000003,
            -0.749400000000001,
            -0.500399999999999,
            -0.617600000000003,
            -0.6922,
            -0.601599999999998,
            -0.416200000000003,
            -0.338200000000001,
            -0.782600000000002,
            -0.648600000000002,
            -0.919800000000002,
            -0.851799999999997,
            -0.962400000000002,
            -0.6402,
            -1.1922,
            -1.0256,
            -1.086,
            -1.21899999999999,
            -0.819400000000002,
            -0.940600000000003,
            -1.1554,
            -1.2072,
            -1.1752,
            -1.16759999999999,
            -1.14019999999999,
            -1.3754,
            -1.29859999999999,
            -1.607,
            -1.3292,
            -1.7606, },
        // precision 5
        {
            22,
            21.1194,
            20.8208,
            20.2318,
            19.77,
            19.2436,
            18.7774,
            18.2848,
            17.8224,
            17.3742,
            16.9336,
            16.503,
            16.0494,
            15.6292,
            15.2124,
            14.798,
            14.367,
            13.9728,
            13.5944,
            13.217,
            12.8438,
            12.3696,
            12.0956,
            11.7044,
            11.324,
            11.0668,
            10.6698,
            10.3644,
            10.049,
            9.6918,
            9.4146,
            9.082,
            8.687,
            8.5398,
            8.2462,
            7.857,
            7.6606,
            7.4168,
            7.1248,
            6.9222,
            6.6804,
            6.447,
            6.3454,
            5.9594,
            5.7636,
            5.5776,
            5.331,
            5.19,
            4.9676,
            4.7564,
            4.5314,
            4.4442,
            4.3708,
            3.9774,
            3.9624,
            3.8796,
            3.755,
            3.472,
            3.2076,
            3.1024,
            2.8908,
            2.7338,
            2.7728,
            2.629,
            2.413,
            2.3266,
            2.1524,
            2.2642,
            2.1806,
            2.0566,
            1.9192,
            1.7598,
            1.3516,
            1.5802,
            1.43859999999999,
            1.49160000000001,
            1.1524,
            1.1892,
            0.841399999999993,
            0.879800000000003,
            0.837599999999995,
            0.469800000000006,
            0.765600000000006,
            0.331000000000003,
            0.591399999999993,
            0.601200000000006,
            0.701599999999999,
            0.558199999999999,
            0.339399999999998,
            0.354399999999998,
            0.491200000000006,
            0.308000000000007,
            0.355199999999996,
            -0.0254000000000048,
            0.205200000000005,
            -0.272999999999996,
            0.132199999999997,
            0.394400000000005,
            -0.241200000000006,
            0.242000000000004,
            0.191400000000002,
            0.253799999999998,
            -0.122399999999999,
            -0.370800000000003,
            0.193200000000004,
            -0.0848000000000013,
            0.0867999999999967,
            -0.327200000000005,
            -0.285600000000002,
            0.311400000000006,
            -0.128399999999999,
            -0.754999999999995,
            -0.209199999999996,
            -0.293599999999998,
            -0.364000000000004,
            -0.253600000000006,
            -0.821200000000005,
            -0.253600000000006,
            -0.510400000000004,
            -0.383399999999995,
            -0.491799999999998,
            -0.220200000000006,
            -0.0972000000000008,
            -0.557400000000001,
            -0.114599999999996,
            -0.295000000000002,
            -0.534800000000004,
            0.346399999999988,
            -0.65379999999999,
            0.0398000000000138,
            0.0341999999999985,
            -0.995800000000003,
            -0.523400000000009,
            -0.489000000000004,
            -0.274799999999999,
            -0.574999999999989,
            -0.482799999999997,
            0.0571999999999946,
            -0.330600000000004,
            -0.628800000000012,
            -0.140199999999993,
            -0.540600000000012,
            -0.445999999999998,
            -0.599400000000003,
            -0.262599999999992,
            0.163399999999996,
            -0.100599999999986,
            -0.39500000000001,
            -1.06960000000001,
            -0.836399999999998,
            -0.753199999999993,
            -0.412399999999991,
            -0.790400000000005,
            -0.29679999999999,
            -0.28540000000001,
            -0.193000000000012,
            -0.0772000000000048,
            -0.962799999999987,
            -0.414800000000014, },
        // precision 6
        {
            45,
            44.1902,
            43.271,
            42.8358,
            41.8142,
            41.2854,
            40.317,
            39.354,
            38.8924,
            37.9436,
            37.4596,
            36.5262,
            35.6248,
            35.1574,
            34.2822,
            33.837,
            32.9636,
            32.074,
            31.7042,
            30.7976,
            30.4772,
            29.6564,
            28.7942,
            28.5004,
            27.686,
            27.291,
            26.5672,
            25.8556,
            25.4982,
            24.8204,
            24.4252,
            23.7744,
            23.0786,
            22.8344,
            22.0294,
            21.8098,
            21.0794,
            20.5732,
            20.1878,
            19.5648,
            19.2902,
            18.6784,
            18.3352,
            17.8946,
            17.3712,
            17.0852,
            16.499,
            16.2686,
            15.6844,
            15.2234,
            14.9732,
            14.3356,
            14.2286,
            13.7262,
            13.3284,
            13.1048,
            12.5962,
            12.3562,
            12.1272,
            11.4184,
            11.4974,
            11.0822,
            10.856,
            10.48,
            10.2834,
            10.0208,
            9.637,
            9.51739999999999,
            9.05759999999999,
            8.74760000000001,
            8.42700000000001,
            8.1326,
            8.2372,
            8.2788,
            7.6776,
            7.79259999999999,
            7.1952,
            6.9564,
            6.6454,
            6.87,
            6.5428,
            6.19999999999999,
            6.02940000000001,
            5.62780000000001,
            5.6782,
            5.792,
            5.35159999999999,
            5.28319999999999,
            5.0394,
            5.07480000000001,
            4.49119999999999,
            4.84899999999999,
            4.696,
            4.54040000000001,
            4.07300000000001,
            4.37139999999999,
            3.7216,
            3.7328,
            3.42080000000001,
            3.41839999999999,
            3.94239999999999,
            3.27719999999999,
            3.411,
            3.13079999999999,
            2.76900000000001,
            2.92580000000001,
            2.68279999999999,
            2.75020000000001,
            2.70599999999999,
            2.3886,
            3.01859999999999,
            2.45179999999999,
            2.92699999999999,
            2.41720000000001,
            2.41139999999999,
            2.03299999999999,
            2.51240000000001,
            2.5564,
            2.60079999999999,
            2.41720000000001,
            1.80439999999999,
            1.99700000000001,
            2.45480000000001,
            1.8948,
            2.2346,
            2.30860000000001,
            2.15479999999999,
            1.88419999999999,
            1.6508,
            0.677199999999999,
            1.72540000000001,
            1.4752,
            1.72280000000001,
            1.66139999999999,
            1.16759999999999,
            1.79300000000001,
            1.00059999999999,
            0.905200000000008,
            0.659999999999997,
            1.55879999999999,
            1.1636,
            0.688199999999995,
            0.712600000000009,
            0.450199999999995,
            1.1978,
            0.975599999999986,
            0.165400000000005,
            1.727,
            1.19739999999999,
            -0.252600000000001,
            1.13460000000001,
            1.3048,
            1.19479999999999,
            0.313400000000001,
            0.878999999999991,
            1.12039999999999,
            0.853000000000009,
            1.67920000000001,
            0.856999999999999,
            0.448599999999999,
            1.2362,
            0.953399999999988,
            1.02859999999998,
            0.563199999999995,
            0.663000000000011,
            0.723000000000013,
            0.756599999999992,
            0.256599999999992,
            -0.837600000000009,
            0.620000000000005,
            0.821599999999989,
            0.216600000000028,
            0.205600000000004,
            0.220199999999977,
            0.372599999999977,
            0.334400000000016,
            0.928400000000011,
            0.972800000000007,
            0.192400000000021,
            0.487199999999973,
            -0.413000000000011,
            0.807000000000016,
            0.120600000000024,
            0.769000000000005,
            0.870799999999974,
            0.66500000000002,
            0.118200000000002,
            0.401200000000017,
            0.635199999999998,
            0.135400000000004,
            0.175599999999974,
            1.16059999999999,
            0.34620000000001,
            0.521400000000028,
            -0.586599999999976,
            -1.16480000000001,
            0.968399999999974,
            0.836999999999989,
            0.779600000000016,
            0.985799999999983, },
        // precision 7
        {
            91,
            89.4934,
            87.9758,
            86.4574,
            84.9718,
            83.4954,
            81.5302,
            80.0756,
            78.6374,
            77.1782,
            75.7888,
            73.9522,
            72.592,
            71.2532,
            69.9086,
            68.5938,
            66.9474,
            65.6796,
            64.4394,
            63.2176,
            61.9768,
            60.4214,
            59.2528,
            58.0102,
            56.8658,
            55.7278,
            54.3044,
            53.1316,
            52.093,
            51.0032,
            49.9092,
            48.6306,
            47.5294,
            46.5756,
            45.6508,
            44.662,
            43.552,
            42.3724,
            41.617,
            40.5754,
            39.7872,
            38.8444,
            37.7988,
            36.8606,
            36.2118,
            35.3566,
            34.4476,
            33.5882,
            32.6816,
            32.0824,
            31.0258,
            30.6048,
            29.4436,
            28.7274,
            27.957,
            27.147,
            26.4364,
            25.7592,
            25.3386,
            24.781,
            23.8028,
            23.656,
            22.6544,
            21.996,
            21.4718,
            21.1544,
            20.6098,
            19.5956,
            19.0616,
            18.5758,
            18.4878,
            17.5244,
            17.2146,
            16.724,
            15.8722,
            15.5198,
            15.0414,
            14.941,
            14.9048,
            13.87,
            13.4304,
            13.028,
            12.4708,
            12.37,
            12.0624,
            11.4668,
            11.5532,
            11.4352,
            11.2564,
            10.2744,
            10.2118,
            9.74720000000002,
            10.1456,
            9.2928,
            8.75040000000001,
            8.55279999999999,
            8.97899999999998,
            8.21019999999999,
            8.18340000000001,
            7.3494,
            7.32499999999999,
            7.66140000000001,
            6.90300000000002,
            7.25439999999998,
            6.9042,
            7.21499999999997,
            6.28640000000001,
            6.08139999999997,
            6.6764,
            6.30099999999999,
            5.13900000000001,
            5.65800000000002,
            5.17320000000001,
            4.59019999999998,
            4.9538,
            5.08280000000002,
            4.92200000000003,
            4.99020000000002,
            4.7328,
            5.4538,
            4.11360000000002,
            4.22340000000003,
            4.08780000000002,
            3.70800000000003,
            4.15559999999999,
            4.18520000000001,
            3.63720000000001,
            3.68220000000002,
            3.77960000000002,
            3.6078,
            2.49160000000001,
            3.13099999999997,
            2.5376,
            3.19880000000001,
            3.21100000000001,
            2.4502,
            3.52820000000003,
            2.91199999999998,
            3.04480000000001,
            2.7432,
            2.85239999999999,
            2.79880000000003,
            2.78579999999999,
            1.88679999999999,
            2.98860000000002,
            2.50639999999999,
            1.91239999999999,
            2.66160000000002,
            2.46820000000002,
            1.58199999999999,
            1.30399999999997,
            2.27379999999999,
            2.68939999999998,
            1.32900000000001,
            3.10599999999999,
            1.69080000000002,
            2.13740000000001,
            2.53219999999999,
            1.88479999999998,
            1.33240000000001,
            1.45119999999997,
            1.17899999999997,
            2.44119999999998,
            1.60659999999996,
            2.16700000000003,
            0.77940000000001,
            2.37900000000002,
            2.06700000000001,
            1.46000000000004,
            2.91160000000002,
            1.69200000000001,
            0.954600000000028,
            2.49300000000005,
            2.2722,
            1.33500000000004,
            2.44899999999996,
            1.20140000000004,
            3.07380000000001,
            2.09739999999999,
            2.85640000000001,
            2.29960000000005,
            2.40899999999999,
            1.97040000000004,
            0.809799999999996,
            1.65279999999996,
            2.59979999999996,
            0.95799999999997,
            2.06799999999998,
            2.32780000000002,
            4.20159999999998,
            1.96320000000003,
            1.86400000000003,
            1.42999999999995,
            3.77940000000001,
            1.27200000000005,
            1.86440000000005,
            2.20600000000002,
            3.21900000000005,
            1.5154,
            2.61019999999996, },
        // precision 8
        {
            183.2152,
            180.2454,
            177.2096,
            173.6652,
            170.6312,
            167.6822,
            164.249,
            161.3296,
            158.0038,
            155.2074,
            152.4612,
            149.27,
            146.5178,
            143.4412,
            140.8032,
            138.1634,
            135.1688,
            132.6074,
            129.6946,
            127.2664,
            124.8228,
            122.0432,
            119.6824,
            116.9464,
            114.6268,
            112.2626,
            109.8376,
            107.4034,
            104.8956,
            102.8522,
            100.7638,
            98.3552,
            96.3556,
            93.7526,
            91.9292,
            89.8954,
            87.8198,
            85.7668,
            83.298,
            81.6688,
            79.9466,
            77.9746,
            76.1672,
            74.3474,
            72.3028,
            70.8912,
            69.114,
            67.4646,
            65.9744,
            64.4092,
            62.6022,
            60.843,
            59.5684,
            58.1652,
            56.5426,
            55.4152,
            53.5388,
            52.3592,
            51.1366,
            49.486,
            48.3918,
            46.5076,
            45.509,
            44.3834,
            43.3498,
            42.0668,
            40.7346,
            40.1228,
            38.4528,
            37.7,
            36.644,
            36.0518,
            34.5774,
            33.9068,
            32.432,
            32.1666,
            30.434,
            29.6644,
            28.4894,
            27.6312,
            26.3804,
            26.292,
            25.5496000000001,
            25.0234,
            24.8206,
            22.6146,
            22.4188,
            22.117,
            20.6762,
            20.6576,
            19.7864,
            19.509,
            18.5334,
            17.9204,
            17.772,
            16.2924,
            16.8654,
            15.1836,
            15.745,
            15.1316,
            15.0386,
            14.0136,
            13.6342,
            12.6196,
            12.1866,
            12.4281999999999,
            11.3324,
            10.4794000000001,
            11.5038,
            10.129,
            9.52800000000002,
            10.3203999999999,
            9.46299999999997,
            9.79280000000006,
            9.12300000000005,
            8.74180000000001,
            9.2192,
            7.51020000000005,
            7.60659999999996,
            7.01840000000004,
            7.22239999999999,
            7.40139999999997,
            6.76179999999999,
            7.14359999999999,
            5.65060000000005,
            5.63779999999997,
            5.76599999999996,
            6.75139999999999,
            5.57759999999996,
            3.73220000000003,
            5.8048,
            5.63019999999995,
            4.93359999999996,
            3.47979999999995,
            4.33879999999999,
            3.98940000000005,
            3.81960000000004,
            3.31359999999995,
            3.23080000000004,
            3.4588,
            3.08159999999998,
            3.4076,
            3.00639999999999,
            2.38779999999997,
            2.61900000000003,
            1.99800000000005,
            3.34820000000002,
            2.95060000000001,
            0.990999999999985,
            2.11440000000005,
            2.20299999999997,
            2.82219999999995,
            2.73239999999998,
            2.7826,
            3.76660000000004,
            2.26480000000004,
            2.31280000000004,
            2.40819999999997,
            2.75360000000001,
            3.33759999999995,
            2.71559999999999,
            1.7478000000001,
            1.42920000000004,
            2.39300000000003,
            2.22779999999989,
            2.34339999999997,
            0.87259999999992,
            3.88400000000001,
            1.80600000000004,
            1.91759999999999,
            1.16779999999994,
            1.50320000000011,
            2.52500000000009,
            0.226400000000012,
            2.31500000000005,
            0.930000000000064,
            1.25199999999995,
            2.14959999999996,
            0.0407999999999902,
            2.5447999999999,
            1.32960000000003,
            0.197400000000016,
            2.52620000000002,
            3.33279999999991,
            -1.34300000000007,
            0.422199999999975,
            0.917200000000093,
            1.12920000000008,
            1.46060000000011,
            1.45779999999991,
            2.8728000000001,
            3.33359999999993,
            -1.34079999999994,
            1.57680000000005,
            0.363000000000056,
            1.40740000000005,
            0.656600000000026,
            0.801400000000058,
            -0.454600000000028,
            1.51919999999996, },
        // precision 9
        {
            368,
            361.8294,
            355.2452,
            348.6698,
            342.1464,
            336.2024,
            329.8782,
            323.6598,
            317.462,
            311.2826,
            305.7102,
            299.7416,
            293.9366,
            288.1046,
            282.285,
            277.0668,
            271.306,
            265.8448,
            260.301,
            254.9886,
            250.2422,
            244.8138,
            239.7074,
            234.7428,
            229.8402,
            225.1664,
            220.3534,
            215.594,
            210.6886,
            205.7876,
            201.65,
            197.228,
            192.8036,
            188.1666,
            184.0818,
            180.0824,
            176.2574,
            172.302,
            168.1644,
            164.0056,
            160.3802,
            156.7192,
            152.5234,
            149.2084,
            145.831,
            142.485,
            139.1112,
            135.4764,
            131.76,
            129.3368,
            126.5538,
            122.5058,
            119.2646,
            116.5902,
            113.3818,
            110.8998,
            107.9532,
            105.2062,
            102.2798,
            99.4728,
            96.9582,
            94.3292,
            92.171,
            89.7809999999999,
            87.5716,
            84.7048,
            82.5322,
            79.875,
            78.3972,
            75.3464,
            73.7274,
            71.2834,
            70.1444,
            68.4263999999999,
            66.0166,
            64.018,
            62.0437999999999,
            60.3399999999999,
            58.6856,
            57.9836,
            55.0311999999999,
            54.6769999999999,
            52.3188,
            51.4846,
            49.4423999999999,
            47.739,
            46.1487999999999,
            44.9202,
            43.4059999999999,
            42.5342000000001,
            41.2834,
            38.8954000000001,
            38.3286000000001,
            36.2146,
            36.6684,
            35.9946,
            33.123,
            33.4338,
            31.7378000000001,
            29.076,
            28.9692,
            27.4964,
            27.0998,
            25.9864,
            26.7754,
            24.3208,
            23.4838,
            22.7388000000001,
            24.0758000000001,
            21.9097999999999,
            20.9728,
            19.9228000000001,
            19.9292,
            16.617,
            17.05,
            18.2996000000001,
            15.6128000000001,
            15.7392,
            14.5174,
            13.6322,
            12.2583999999999,
            13.3766000000001,
            11.423,
            13.1232,
            9.51639999999998,
            10.5938000000001,
            9.59719999999993,
            8.12220000000002,
            9.76739999999995,
            7.50440000000003,
            7.56999999999994,
            6.70440000000008,
            6.41419999999994,
            6.71019999999999,
            5.60940000000005,
            4.65219999999999,
            6.84099999999989,
            3.4072000000001,
            3.97859999999991,
            3.32760000000007,
            5.52160000000003,
            3.31860000000006,
            2.06940000000009,
            4.35400000000004,
            1.57500000000005,
            0.280799999999999,
            2.12879999999996,
            -0.214799999999968,
            -0.0378000000000611,
            -0.658200000000079,
            0.654800000000023,
            -0.0697999999999865,
            0.858400000000074,
            -2.52700000000004,
            -2.1751999999999,
            -3.35539999999992,
            -1.04019999999991,
            -0.651000000000067,
            -2.14439999999991,
            -1.96659999999997,
            -3.97939999999994,
            -0.604400000000169,
            -3.08260000000018,
            -3.39159999999993,
            -5.29640000000018,
            -5.38920000000007,
            -5.08759999999984,
            -4.69900000000007,
            -5.23720000000003,
            -3.15779999999995,
            -4.97879999999986,
            -4.89899999999989,
            -7.48880000000008,
            -5.94799999999987,
            -5.68060000000014,
            -6.67180000000008,
            -4.70499999999993,
            -7.27779999999984,
            -4.6579999999999,
            -4.4362000000001,
            -4.32139999999981,
            -5.18859999999995,
            -6.66879999999992,
            -6.48399999999992,
            -5.1260000000002,
            -4.4032000000002,
            -6.13500000000022,
            -5.80819999999994,
            -4.16719999999987,
            -4.15039999999999,
            -7.45600000000013,
            -7.24080000000004,
            -9.83179999999993,
            -5.80420000000004,
            -8.6561999999999,
            -6.99940000000015,
            -10.5473999999999,
            -7.34139999999979,
            -6.80999999999995,
            -6.29719999999998,
            -6.23199999999997, },
        // precision 10
        {
            737.1256,
            724.4234,
            711.1064,
            698.4732,
            685.4636,
            673.0644,
            660.488,
            647.9654,
            636.0832,
            623.7864,
            612.1992,
            600.2176,
            588.5228,
            577.1716,
            565.7752,
            554.899,
            543.6126,
            532.6492,
            521.9474,
            511.5214,
            501.1064,
            490.6364,
            480.2468,
            470.4588,
            460.3832,
            451.0584,
            440.8606,
            431.3868,
            422.5062,
            413.1862,
            404.463,
            395.339,
            386.1936,
            378.1292,
            369.1854,
            361.2908,
            353.3324,
            344.8518,
            337.5204,
            329.4854,
            321.9318,
            314.552,
            306.4658,
            299.4256,
            292.849,
            286.152,
            278.8956,
            271.8792,
            265.118,
            258.62,
            252.5132,
            245.9322,
            239.7726,
            233.6086,
            227.5332,
            222.5918,
            216.4294,
            210.7662,
            205.4106,
            199.7338,
            194.9012,
            188.4486,
            183.1556,
            178.6338,
            173.7312,
            169.6264,
            163.9526,
            159.8742,
            155.8326,
            151.1966,
            147.5594,
            143.07,
            140.037,
            134.1804,
            131.071,
            127.4884,
            124.0848,
            120.2944,
            117.333,
            112.9626,
            110.2902,
            107.0814,
            103.0334,
            99.4832000000001,
            96.3899999999999,
            93.7202000000002,
            90.1714000000002,
            87.2357999999999,
            85.9346,
            82.8910000000001,
            80.0264000000002,
            78.3834000000002,
            75.1543999999999,
            73.8683999999998,
            70.9895999999999,
            69.4367999999999,
            64.8701999999998,
            65.0408000000002,
            61.6738,
            59.5207999999998,
            57.0158000000001,
            54.2302,
            53.0962,
            50.4985999999999,
            52.2588000000001,
            47.3914,
            45.6244000000002,
            42.8377999999998,
            43.0072,
            40.6516000000001,
            40.2453999999998,
            35.2136,
            36.4546,
            33.7849999999999,
            33.2294000000002,
            32.4679999999998,
            30.8670000000002,
            28.6507999999999,
            28.9099999999999,
            27.5983999999999,
            26.1619999999998,
            24.5563999999999,
            23.2328000000002,
            21.9484000000002,
            21.5902000000001,
            21.3346000000001,
            17.7031999999999,
            20.6111999999998,
            19.5545999999999,
            15.7375999999999,
            17.0720000000001,
            16.9517999999998,
            15.326,
            13.1817999999998,
            14.6925999999999,
            13.0859999999998,
            13.2754,
            10.8697999999999,
            11.248,
            7.3768,
            4.72339999999986,
            7.97899999999981,
            8.7503999999999,
            7.68119999999999,
            9.7199999999998,
            7.73919999999998,
            5.6224000000002,
            7.44560000000001,
            6.6601999999998,
            5.9058,
            4.00199999999995,
            4.51699999999983,
            4.68240000000014,
            3.86220000000003,
            5.13639999999987,
            5.98500000000013,
            2.47719999999981,
            2.61999999999989,
            1.62800000000016,
            4.65000000000009,
            0.225599999999758,
            0.831000000000131,
            -0.359400000000278,
            1.27599999999984,
            -2.92559999999958,
            -0.0303999999996449,
            2.37079999999969,
            -2.0033999999996,
            0.804600000000391,
            0.30199999999968,
            1.1247999999996,
            -2.6880000000001,
            0.0321999999996478,
            -1.18099999999959,
            -3.9402,
            -1.47940000000017,
            -0.188400000000001,
            -2.10720000000038,
            -2.04159999999956,
            -3.12880000000041,
            -4.16160000000036,
            -0.612799999999879,
            -3.48719999999958,
            -8.17900000000009,
            -5.37780000000021,
            -4.01379999999972,
            -5.58259999999973,
            -5.73719999999958,
            -7.66799999999967,
            -5.69520000000011,
            -1.1247999999996,
            -5.58520000000044,
            -8.04560000000038,
            -4.64840000000004,
            -11.6468000000004,
            -7.97519999999986,
            -5.78300000000036,
            -7.67420000000038,
            -10.6328000000003,
            -9.81720000000041, },
        // precision 11
        {
            1476,
            1449.6014,
            1423.5802,
            1397.7942,
            1372.3042,
            1347.2062,
            1321.8402,
            1297.2292,
            1272.9462,
            1248.9926,
            1225.3026,
            1201.4252,
            1178.0578,
            1155.6092,
            1132.626,
            1110.5568,
            1088.527,
            1066.5154,
            1045.1874,
            1024.3878,
            1003.37,
            982.1972,
            962.5728,
            942.1012,
            922.9668,
            903.292,
            884.0772,
            864.8578,
            846.6562,
            828.041,
            809.714,
            792.3112,
            775.1806,
            757.9854,
            740.656,
            724.346,
            707.5154,
            691.8378,
            675.7448,
            659.6722,
            645.5722,
            630.1462,
            614.4124,
            600.8728,
            585.898,
            572.408,
            558.4926,
            544.4938,
            531.6776,
            517.282,
            505.7704,
            493.1012,
            480.7388,
            467.6876,
            456.1872,
            445.5048,
            433.0214,
            420.806,
            411.409,
            400.4144,
            389.4294,
            379.2286,
            369.651,
            360.6156,
            350.337,
            342.083,
            332.1538,
            322.5094,
            315.01,
            305.6686,
            298.1678,
            287.8116,
            280.9978,
            271.9204,
            265.3286,
            257.5706,
            249.6014,
            242.544,
            235.5976,
            229.583,
            220.9438,
            214.672,
            208.2786,
            201.8628,
            195.1834,
            191.505,
            186.1816,
            178.5188,
            172.2294,
            167.8908,
            161.0194,
            158.052,
            151.4588,
            148.1596,
            143.4344,
            138.5238,
            133.13,
            127.6374,
            124.8162,
            118.7894,
            117.3984,
            114.6078,
            109.0858,
            105.1036,
            103.6258,
            98.6018000000004,
            95.7618000000002,
            93.5821999999998,
            88.5900000000001,
            86.9992000000002,
            82.8800000000001,
            80.4539999999997,
            74.6981999999998,
            74.3644000000004,
            73.2914000000001,
            65.5709999999999,
            66.9232000000002,
            65.1913999999997,
            62.5882000000001,
            61.5702000000001,
            55.7035999999998,
            56.1764000000003,
            52.7596000000003,
            53.0302000000001,
            49.0609999999997,
            48.4694,
            44.933,
            46.0474000000004,
            44.7165999999997,
            41.9416000000001,
            39.9207999999999,
            35.6328000000003,
            35.5276000000003,
            33.1934000000001,
            33.2371999999996,
            33.3864000000003,
            33.9228000000003,
            30.2371999999996,
            29.1373999999996,
            25.2272000000003,
            24.2942000000003,
            19.8338000000003,
            18.9005999999999,
            23.0907999999999,
            21.8544000000002,
            19.5176000000001,
            15.4147999999996,
            16.9314000000004,
            18.6737999999996,
            12.9877999999999,
            14.3688000000002,
            12.0447999999997,
            15.5219999999999,
            12.5299999999997,
            14.5940000000001,
            14.3131999999996,
            9.45499999999993,
            12.9441999999999,
            3.91139999999996,
            13.1373999999996,
            5.44720000000052,
            9.82779999999912,
            7.87279999999919,
            3.67760000000089,
            5.46980000000076,
            5.55099999999948,
            5.65979999999945,
            3.89439999999922,
            3.1275999999998,
            5.65140000000065,
            6.3062000000009,
            3.90799999999945,
            1.87060000000019,
            5.17020000000048,
            2.46680000000015,
            0.770000000000437,
            -3.72340000000077,
            1.16400000000067,
            8.05340000000069,
            0.135399999999208,
            2.15940000000046,
            0.766999999999825,
            1.0594000000001,
            3.15500000000065,
            -0.287399999999252,
            2.37219999999979,
            -2.86620000000039,
            -1.63199999999961,
            -2.22979999999916,
            -0.15519999999924,
            -1.46039999999994,
            -0.262199999999211,
            -2.34460000000036,
            -2.8078000000005,
            -3.22179999999935,
            -5.60159999999996,
            -8.42200000000048,
            -9.43740000000071,
            0.161799999999857,
            -10.4755999999998,
            -10.0823999999993, },
        // precision 12
        {
            2953,
            2900.4782,
            2848.3568,
            2796.3666,
            2745.324,
            2694.9598,
            2644.648,
            2595.539,
            2546.1474,
            2498.2576,
            2450.8376,
            2403.6076,
            2357.451,
            2311.38,
            2266.4104,
            2221.5638,
            2176.9676,
            2134.193,
            2090.838,
            2048.8548,
            2007.018,
            1966.1742,
            1925.4482,
            1885.1294,
            1846.4776,
            1807.4044,
            1768.8724,
            1731.3732,
            1693.4304,
            1657.5326,
            1621.949,
            1586.5532,
            1551.7256,
            1517.6182,
            1483.5186,
            1450.4528,
            1417.865,
            1385.7164,
            1352.6828,
            1322.6708,
            1291.8312,
            1260.9036,
            1231.476,
            1201.8652,
            1173.6718,
            1145.757,
            1119.2072,
            1092.2828,
            1065.0434,
            1038.6264,
            1014.3192,
            988.5746,
            965.0816,
            940.1176,
            917.9796,
            894.5576,
            871.1858,
            849.9144,
            827.1142,
            805.0818,
            783.9664,
            763.9096,
            742.0816,
            724.3962,
            706.3454,
            688.018,
            667.4214,
            650.3106,
            633.0686,
            613.8094,
            597.818,
            581.4248,
            563.834,
            547.363,
            531.5066,
            520.455400000001,
            505.583199999999,
            488.366,
            476.480799999999,
            459.7682,
            450.0522,
            434.328799999999,
            423.952799999999,
            408.727000000001,
            399.079400000001,
            387.252200000001,
            373.987999999999,
            360.852000000001,
            351.6394,
            339.642,
            330.902400000001,
            322.661599999999,
            311.662200000001,
            301.3254,
            291.7484,
            279.939200000001,
            276.7508,
            263.215200000001,
            254.811400000001,
            245.5494,
            242.306399999999,
            234.8734,
            223.787200000001,
            217.7156,
            212.0196,
            200.793,
            195.9748,
            189.0702,
            182.449199999999,
            177.2772,
            170.2336,
            164.741,
            158.613600000001,
            155.311,
            147.5964,
            142.837,
            137.3724,
            132.0162,
            130.0424,
            121.9804,
            120.451800000001,
            114.8968,
            111.585999999999,
            105.933199999999,
            101.705,
            98.5141999999996,
            95.0488000000005,
            89.7880000000005,
            91.4750000000004,
            83.7764000000006,
            80.9698000000008,
            72.8574000000008,
            73.1615999999995,
            67.5838000000003,
            62.6263999999992,
            63.2638000000006,
            66.0977999999996,
            52.0843999999997,
            58.9956000000002,
            47.0912000000008,
            46.4956000000002,
            48.4383999999991,
            47.1082000000006,
            43.2392,
            37.2759999999998,
            40.0283999999992,
            35.1864000000005,
            35.8595999999998,
            32.0998,
            28.027,
            23.6694000000007,
            33.8266000000003,
            26.3736000000008,
            27.2008000000005,
            21.3245999999999,
            26.4115999999995,
            23.4521999999997,
            19.5013999999992,
            19.8513999999996,
            10.7492000000002,
            18.6424000000006,
            13.1265999999996,
            18.2436000000016,
            6.71860000000015,
            3.39459999999963,
            6.33759999999893,
            7.76719999999841,
            0.813999999998487,
            3.82819999999992,
            0.826199999999517,
            8.07440000000133,
            -1.59080000000176,
            5.01780000000144,
            0.455399999998917,
            -0.24199999999837,
            0.174800000000687,
            -9.07640000000174,
            -4.20160000000033,
            -3.77520000000004,
            -4.75179999999818,
            -5.3724000000002,
            -8.90680000000066,
            -6.10239999999976,
            -5.74120000000039,
            -9.95339999999851,
            -3.86339999999836,
            -13.7304000000004,
            -16.2710000000006,
            -7.51359999999841,
            -3.30679999999847,
            -13.1339999999982,
            -10.0551999999989,
            -6.72019999999975,
            -8.59660000000076,
            -10.9307999999983,
            -1.8775999999998,
            -4.82259999999951,
            -13.7788,
            -21.6470000000008,
            -10.6735999999983,
            -15.7799999999988, },
        // precision 13
        {
            5907.5052,
            5802.2672,
            5697.347,
            5593.5794,
            5491.2622,
            5390.5514,
            5290.3376,
            5191.6952,
            5093.5988,
            4997.3552,
            4902.5972,
            4808.3082,
            4715.5646,
            4624.109,
            4533.8216,
            4444.4344,
            4356.3802,
            4269.2962,
            4183.3784,
            4098.292,
            4014.79,
            3932.4574,
            3850.6036,
            3771.2712,
            3691.7708,
            3615.099,
            3538.1858,
            3463.4746,
            3388.8496,
            3315.6794,
            3244.5448,
            3173.7516,
            3103.3106,
            3033.6094,
            2966.5642,
            2900.794,
            2833.7256,
            2769.81,
            2707.3196,
            2644.0778,
            2583.9916,
            2523.4662,
            2464.124,
            2406.073,
            2347.0362,
            2292.1006,
            2238.1716,
            2182.7514,
            2128.4884,
            2077.1314,
            2025.037,
            1975.3756,
            1928.933,
            1879.311,
            1831.0006,
            1783.2144,
            1738.3096,
            1694.5144,
            1649.024,
            1606.847,
            1564.7528,
            1525.3168,
            1482.5372,
            1443.9668,
            1406.5074,
            1365.867,
            1329.2186,
            1295.4186,
            1257.9716,
            1225.339,
            1193.2972,
            1156.3578,
            1125.8686,
            1091.187,
            1061.4094,
            1029.4188,
            1000.9126,
            972.3272,
            944.004199999999,
            915.7592,
            889.965,
            862.834200000001,
            840.4254,
            812.598399999999,
            785.924200000001,
            763.050999999999,
            741.793799999999,
            721.466,
            699.040799999999,
            677.997200000002,
            649.866999999998,
            634.911800000002,
            609.8694,
            591.981599999999,
            570.2922,
            557.129199999999,
            538.3858,
            521.872599999999,
            502.951400000002,
            495.776399999999,
            475.171399999999,
            459.751,
            439.995200000001,
            426.708999999999,
            413.7016,
            402.3868,
            387.262599999998,
            372.0524,
            357.050999999999,
            342.5098,
            334.849200000001,
            322.529399999999,
            311.613799999999,
            295.848000000002,
            289.273000000001,
            274.093000000001,
            263.329600000001,
            251.389599999999,
            245.7392,
            231.9614,
            229.7952,
            217.155200000001,
            208.9588,
            199.016599999999,
            190.839199999999,
            180.6976,
            176.272799999999,
            166.976999999999,
            162.5252,
            151.196400000001,
            149.386999999999,
            133.981199999998,
            130.0586,
            130.164000000001,
            122.053400000001,
            110.7428,
            108.1276,
            106.232400000001,
            100.381600000001,
            98.7668000000012,
            86.6440000000002,
            79.9768000000004,
            82.4722000000002,
            68.7026000000005,
            70.1186000000016,
            71.9948000000004,
            58.998599999999,
            59.0492000000013,
            56.9818000000014,
            47.5338000000011,
            42.9928,
            51.1591999999982,
            37.2740000000013,
            42.7220000000016,
            31.3734000000004,
            26.8090000000011,
            25.8934000000008,
            26.5286000000015,
            29.5442000000003,
            19.3503999999994,
            26.0760000000009,
            17.9527999999991,
            14.8419999999969,
            10.4683999999979,
            8.65899999999965,
            9.86720000000059,
            4.34139999999752,
            -0.907800000000861,
            -3.32080000000133,
            -0.936199999996461,
            -11.9916000000012,
            -8.87000000000262,
            -6.33099999999831,
            -11.3366000000024,
            -15.9207999999999,
            -9.34659999999712,
            -15.5034000000014,
            -19.2097999999969,
            -15.357799999998,
            -28.2235999999975,
            -30.6898000000001,
            -19.3271999999997,
            -25.6083999999973,
            -24.409599999999,
            -13.6385999999984,
            -33.4473999999973,
            -32.6949999999997,
            -28.9063999999998,
            -31.7483999999968,
            -32.2935999999972,
            -35.8329999999987,
            -47.620600000002,
            -39.0855999999985,
            -33.1434000000008,
            -46.1371999999974,
            -37.5892000000022,
            -46.8164000000033,
            -47.3142000000007,
            -60.2914000000019,
            -37.7575999999972, },
        // precision 14
        {
            11816.475,
            11605.0046,
            11395.3792,
            11188.7504,
            10984.1814,
            10782.0086,
            10582.0072,
            10384.503,
            10189.178,
            9996.2738,
            9806.0344,
            9617.9798,
            9431.394,
            9248.7784,
            9067.6894,
            8889.6824,
            8712.9134,
            8538.8624,
            8368.4944,
            8197.7956,
            8031.8916,
            7866.6316,
            7703.733,
            7544.5726,
            7386.204,
            7230.666,
            7077.8516,
            6926.7886,
            6778.6902,
            6631.9632,
            6487.304,
            6346.7486,
            6206.4408,
            6070.202,
            5935.2576,
            5799.924,
            5671.0324,
            5541.9788,
            5414.6112,
            5290.0274,
            5166.723,
            5047.6906,
            4929.162,
            4815.1406,
            4699.127,
            4588.5606,
            4477.7394,
            4369.4014,
            4264.2728,
            4155.9224,
            4055.581,
            3955.505,
            3856.9618,
            3761.3828,
            3666.9702,
            3575.7764,
            3482.4132,
            3395.0186,
            3305.8852,
            3221.415,
            3138.6024,
            3056.296,
            2970.4494,
            2896.1526,
            2816.8008,
            2740.2156,
            2670.497,
            2594.1458,
            2527.111,
            2460.8168,
            2387.5114,
            2322.9498,
            2260.6752,
            2194.2686,
            2133.7792,
            2074.767,
            2015.204,
            1959.4226,
            1898.6502,
            1850.006,
            1792.849,
            1741.4838,
            1687.9778,
            1638.1322,
            1589.3266,
            1543.1394,
            1496.8266,
            1447.8516,
            1402.7354,
            1361.9606,
            1327.0692,
            1285.4106,
            1241.8112,
            1201.6726,
            1161.973,
            1130.261,
            1094.2036,
            1048.2036,
            1020.6436,
            990.901400000002,
            961.199800000002,
            924.769800000002,
            899.526400000002,
            872.346400000002,
            834.375,
            810.432000000001,
            780.659800000001,
            756.013800000001,
            733.479399999997,
            707.923999999999,
            673.858,
            652.222399999999,
            636.572399999997,
            615.738599999997,
            586.696400000001,
            564.147199999999,
            541.679600000003,
            523.943599999999,
            505.714599999999,
            475.729599999999,
            461.779600000002,
            449.750800000002,
            439.020799999998,
            412.7886,
            400.245600000002,
            383.188199999997,
            362.079599999997,
            357.533799999997,
            334.319000000003,
            327.553399999997,
            308.559399999998,
            291.270199999999,
            279.351999999999,
            271.791400000002,
            252.576999999997,
            247.482400000001,
            236.174800000001,
            218.774599999997,
            220.155200000001,
            208.794399999999,
            201.223599999998,
            182.995600000002,
            185.5268,
            164.547400000003,
            176.5962,
            150.689599999998,
            157.8004,
            138.378799999999,
            134.021200000003,
            117.614399999999,
            108.194000000003,
            97.0696000000025,
            89.6042000000016,
            95.6030000000028,
            84.7810000000027,
            72.635000000002,
            77.3482000000004,
            59.4907999999996,
            55.5875999999989,
            50.7346000000034,
            61.3916000000027,
            50.9149999999936,
            39.0384000000049,
            58.9395999999979,
            29.633600000001,
            28.2032000000036,
            26.0078000000067,
            17.0387999999948,
            9.22000000000116,
            13.8387999999977,
            8.07240000000456,
            14.1549999999988,
            15.3570000000036,
            3.42660000000615,
            6.24820000000182,
            -2.96940000000177,
            -8.79940000000352,
            -5.97860000000219,
            -14.4048000000039,
            -3.4143999999942,
            -13.0148000000045,
            -11.6977999999945,
            -25.7878000000055,
            -22.3185999999987,
            -24.409599999999,
            -31.9756000000052,
            -18.9722000000038,
            -22.8678000000073,
            -30.8972000000067,
            -32.3715999999986,
            -22.3907999999938,
            -43.6720000000059,
            -35.9038,
            -39.7492000000057,
            -54.1641999999993,
            -45.2749999999942,
            -42.2989999999991,
            -44.1089999999967,
            -64.3564000000042,
            -49.9551999999967,
            -42.6116000000038, },
        // precision 15
        {
            23634.0036,
            23210.8034,
            22792.4744,
            22379.1524,
            21969.7928,
            21565.326,
            21165.3532,
            20770.2806,
            20379.9892,
            19994.7098,
            19613.318,
            19236.799,
            18865.4382,
            18498.8244,
            18136.5138,
            17778.8668,
            17426.2344,
            17079.32,
            16734.778,
            16397.2418,
            16063.3324,
            15734.0232,
            15409.731,
            15088.728,
            14772.9896,
            14464.1402,
            14157.5588,
            13855.5958,
            13559.3296,
            13264.9096,
            12978.326,
            12692.0826,
            12413.8816,
            12137.3192,
            11870.2326,
            11602.5554,
            11340.3142,
            11079.613,
            10829.5908,
            10583.5466,
            10334.0344,
            10095.5072,
            9859.694,
            9625.2822,
            9395.7862,
            9174.0586,
            8957.3164,
            8738.064,
            8524.155,
            8313.7396,
            8116.9168,
            7913.542,
            7718.4778,
            7521.65,
            7335.5596,
            7154.2906,
            6968.7396,
            6786.3996,
            6613.236,
            6437.406,
            6270.6598,
            6107.7958,
            5945.7174,
            5787.6784,
            5635.5784,
            5482.308,
            5337.9784,
            5190.0864,
            5045.9158,
            4919.1386,
            4771.817,
            4645.7742,
            4518.4774,
            4385.5454,
            4262.6622,
            4142.74679999999,
            4015.5318,
            3897.9276,
            3790.7764,
            3685.13800000001,
            3573.6274,
            3467.9706,
            3368.61079999999,
            3271.5202,
            3170.3848,
            3076.4656,
            2982.38400000001,
            2888.4664,
            2806.4868,
            2711.9564,
            2634.1434,
            2551.3204,
            2469.7662,
            2396.61139999999,
            2318.9902,
            2243.8658,
            2171.9246,
            2105.01360000001,
            2028.8536,
            1960.9952,
            1901.4096,
            1841.86079999999,
            1777.54700000001,
            1714.5802,
            1654.65059999999,
            1596.311,
            1546.2016,
            1492.3296,
            1433.8974,
            1383.84600000001,
            1339.4152,
            1293.5518,
            1245.8686,
            1193.50659999999,
            1162.27959999999,
            1107.19439999999,
            1069.18060000001,
            1035.09179999999,
            999.679000000004,
            957.679999999993,
            925.300199999998,
            888.099400000006,
            848.638600000006,
            818.156400000007,
            796.748399999997,
            752.139200000005,
            725.271200000003,
            692.216,
            671.633600000001,
            647.939799999993,
            621.670599999998,
            575.398799999995,
            561.226599999995,
            532.237999999998,
            521.787599999996,
            483.095799999996,
            467.049599999998,
            465.286399999997,
            415.548599999995,
            401.047399999996,
            380.607999999993,
            377.362599999993,
            347.258799999996,
            338.371599999999,
            310.096999999994,
            301.409199999995,
            276.280799999993,
            265.586800000005,
            258.994399999996,
            223.915999999997,
            215.925399999993,
            213.503800000006,
            191.045400000003,
            166.718200000003,
            166.259000000005,
            162.941200000001,
            148.829400000002,
            141.645999999993,
            123.535399999993,
            122.329800000007,
            89.473399999988,
            80.1962000000058,
            77.5457999999926,
            59.1056000000099,
            83.3509999999951,
            52.2906000000075,
            36.3979999999865,
            40.6558000000077,
            42.0003999999899,
            19.6630000000005,
            19.7153999999864,
            -8.38539999999921,
            -0.692799999989802,
            0.854800000000978,
            3.23219999999856,
            -3.89040000000386,
            -5.25880000001052,
            -24.9052000000083,
            -22.6837999999989,
            -26.4286000000138,
            -34.997000000003,
            -37.0216000000073,
            -43.430400000012,
            -58.2390000000014,
            -68.8034000000043,
            -56.9245999999985,
            -57.8583999999973,
            -77.3097999999882,
            -73.2793999999994,
            -81.0738000000129,
            -87.4530000000086,
            -65.0254000000132,
            -57.296399999992,
            -96.2746000000043,
            -103.25,
            -96.081600000005,
            -91.5542000000132,
            -102.465200000006,
            -107.688599999994,
            -101.458000000013,
            -109.715800000005, },
        // precision 16
        {
            47270,
            46423.3584,
            45585.7074,
            44757.152,
            43938.8416,
            43130.9514,
            42330.03,
            41540.407,
            40759.6348,
            39988.206,
            39226.5144,
            38473.2096,
            37729.795,
            36997.268,
            36272.6448,
            35558.665,
            34853.0248,
            34157.4472,
            33470.5204,
            32793.5742,
            32127.0194,
            31469.4182,
            30817.6136,
            30178.6968,
            29546.8908,
            28922.8544,
            28312.271,
            27707.0924,
            27114.0326,
            26526.692,
            25948.6336,
            25383.7826,
            24823.5998,
            24272.2974,
            23732.2572,
            23201.4976,
            22674.2796,
            22163.6336,
            21656.515,
            21161.7362,
            20669.9368,
            20189.4424,
            19717.3358,
            19256.3744,
            18795.9638,
            18352.197,
            17908.5738,
            17474.391,
            17052.918,
            16637.2236,
            16228.4602,
            15823.3474,
            15428.6974,
            15043.0284,
            14667.6278,
            14297.4588,
            13935.2882,
            13578.5402,
            13234.6032,
            12882.1578,
            12548.0728,
            12219.231,
            11898.0072,
            11587.2626,
            11279.9072,
            10973.5048,
            10678.5186,
            10392.4876,
            10105.2556,
            9825.766,
            9562.5444,
            9294.2222,
            9038.2352,
            8784.848,
            8533.2644,
            8301.7776,
            8058.30859999999,
            7822.94579999999,
            7599.11319999999,
            7366.90779999999,
            7161.217,
            6957.53080000001,
            6736.212,
            6548.21220000001,
            6343.06839999999,
            6156.28719999999,
            5975.15419999999,
            5791.75719999999,
            5621.32019999999,
            5451.66,
            5287.61040000001,
            5118.09479999999,
            4957.288,
            4798.4246,
            4662.17559999999,
            4512.05900000001,
            4364.68539999999,
            4220.77720000001,
            4082.67259999999,
            3957.19519999999,
            3842.15779999999,
            3699.3328,
            3583.01180000001,
            3473.8964,
            3338.66639999999,
            3233.55559999999,
            3117.799,
            3008.111,
            2909.69140000001,
            2814.86499999999,
            2719.46119999999,
            2624.742,
            2532.46979999999,
            2444.7886,
            2370.1868,
            2272.45259999999,
            2196.19260000001,
            2117.90419999999,
            2023.2972,
            1969.76819999999,
            1885.58979999999,
            1833.2824,
            1733.91200000001,
            1682.54920000001,
            1604.57980000001,
            1556.11240000001,
            1491.3064,
            1421.71960000001,
            1371.22899999999,
            1322.1324,
            1264.7892,
            1196.23920000001,
            1143.8474,
            1088.67240000001,
            1073.60380000001,
            1023.11660000001,
            959.036400000012,
            927.433199999999,
            906.792799999996,
            853.433599999989,
            841.873800000001,
            791.1054,
            756.899999999994,
            704.343200000003,
            672.495599999995,
            622.790399999998,
            611.254799999995,
            567.283200000005,
            519.406599999988,
            519.188400000014,
            495.312800000014,
            451.350799999986,
            443.973399999988,
            431.882199999993,
            392.027000000002,
            380.924200000009,
            345.128999999986,
            298.901400000002,
            287.771999999997,
            272.625,
            247.253000000026,
            222.490600000019,
            223.590000000026,
            196.407599999977,
            176.425999999978,
            134.725199999986,
            132.4804,
            110.445599999977,
            86.7939999999944,
            56.7038000000175,
            64.915399999998,
            38.3726000000024,
            37.1606000000029,
            46.170999999973,
            49.1716000000015,
            15.3362000000197,
            6.71639999997569,
            -34.8185999999987,
            -39.4476000000141,
            12.6830000000191,
            -12.3331999999937,
            -50.6565999999875,
            -59.9538000000175,
            -65.1054000000004,
            -70.7576000000117,
            -106.325200000021,
            -126.852200000023,
            -110.227599999984,
            -132.885999999999,
            -113.897200000007,
            -142.713800000027,
            -151.145399999979,
            -150.799200000009,
            -177.756200000003,
            -156.036399999983,
            -182.735199999996,
            -177.259399999981,
            -198.663600000029,
            -174.577600000019,
            -193.84580000001, },
        // precision 17
        {
            94541,
            92848.811,
            91174.019,
            89517.558,
            87879.9705,
            86262.7565,
            84663.5125,
            83083.7435,
            81521.7865,
            79977.272,
            78455.9465,
            76950.219,
            75465.432,
            73994.152,
            72546.71,
            71115.2345,
            69705.6765,
            68314.937,
            66944.2705,
            65591.255,
            64252.9485,
            62938.016,
            61636.8225,
            60355.592,
            59092.789,
            57850.568,
            56624.518,
            55417.343,
            54231.1415,
            53067.387,
            51903.526,
            50774.649,
            49657.6415,
            48561.05,
            47475.7575,
            46410.159,
            45364.852,
            44327.053,
            43318.4005,
            42325.6165,
            41348.4595,
            40383.6265,
            39436.77,
            38509.502,
            37594.035,
            36695.939,
            35818.6895,
            34955.691,
            34115.8095,
            33293.949,
            32465.0775,
            31657.6715,
            30877.2585,
            30093.78,
            29351.3695,
            28594.1365,
            27872.115,
            27168.7465,
            26477.076,
            25774.541,
            25106.5375,
            24452.5135,
            23815.5125,
            23174.0655,
            22555.2685,
            21960.2065,
            21376.3555,
            20785.1925,
            20211.517,
            19657.0725,
            19141.6865,
            18579.737,
            18081.3955,
            17578.995,
            17073.44,
            16608.335,
            16119.911,
            15651.266,
            15194.583,
            14749.0495,
            14343.4835,
            13925.639,
            13504.509,
            13099.3885,
            12691.2855,
            12328.018,
            11969.0345,
            11596.5145,
            11245.6355,
            10917.6575,
            10580.9785,
            10277.8605,
            9926.58100000001,
            9605.538,
            9300.42950000003,
            8989.97850000003,
            8728.73249999998,
            8448.3235,
            8175.31050000002,
            7898.98700000002,
            7629.79100000003,
            7413.76199999999,
            7149.92300000001,
            6921.12650000001,
            6677.1545,
            6443.28000000003,
            6278.23450000002,
            6014.20049999998,
            5791.20299999998,
            5605.78450000001,
            5438.48800000001,
            5234.2255,
            5059.6825,
            4887.43349999998,
            4682.935,
            4496.31099999999,
            4322.52250000002,
            4191.42499999999,
            4021.24200000003,
            3900.64799999999,
            3762.84250000003,
            3609.98050000001,
            3502.29599999997,
            3363.84250000003,
            3206.54849999998,
            3079.70000000001,
            2971.42300000001,
            2867.80349999998,
            2727.08100000001,
            2630.74900000001,
            2496.6165,
            2440.902,
            2356.19150000002,
            2235.58199999999,
            2120.54149999999,
            2012.25449999998,
            1933.35600000003,
            1820.93099999998,
            1761.54800000001,
            1663.09350000002,
            1578.84600000002,
            1509.48149999999,
            1427.3345,
            1379.56150000001,
            1306.68099999998,
            1212.63449999999,
            1084.17300000001,
            1124.16450000001,
            1060.69949999999,
            1007.48849999998,
            941.194499999983,
            879.880500000028,
            836.007500000007,
            782.802000000025,
            748.385499999975,
            647.991500000004,
            626.730500000005,
            570.776000000013,
            484.000500000024,
            513.98550000001,
            418.985499999952,
            386.996999999974,
            370.026500000036,
            355.496999999974,
            356.731499999994,
            255.92200000002,
            259.094000000041,
            205.434499999974,
            165.374500000034,
            197.347500000033,
            95.718499999959,
            67.6165000000037,
            54.6970000000438,
            31.7395000000251,
            -15.8784999999916,
            8.42500000004657,
            -26.3754999999655,
            -118.425500000012,
            -66.6629999999423,
            -42.9745000000112,
            -107.364999999991,
            -189.839000000036,
            -162.611499999999,
            -164.964999999967,
            -189.079999999958,
            -223.931499999948,
            -235.329999999958,
            -269.639500000048,
            -249.087999999989,
            -206.475499999942,
            -283.04449999996,
            -290.667000000016,
            -304.561499999953,
            -336.784499999951,
            -380.386500000022,
            -283.280499999993,
            -364.533000000054,
            -389.059499999974,
            -364.454000000027,
            -415.748000000021,
            -417.155000000028, },
        // precision 18
        {
            189083,
            185696.913,
            182348.774,
            179035.946,
            175762.762,
            172526.444,
            169329.754,
            166166.099,
            163043.269,
            159958.91,
            156907.912,
            153906.845,
            150924.199,
            147996.568,
            145093.457,
            142239.233,
            139421.475,
            136632.27,
            133889.588,
            131174.2,
            128511.619,
            125868.621,
            123265.385,
            120721.061,
            118181.769,
            115709.456,
            113252.446,
            110840.198,
            108465.099,
            106126.164,
            103823.469,
            101556.618,
            99308.004,
            97124.508,
            94937.803,
            92833.731,
            90745.061,
            88677.627,
            86617.47,
            84650.442,
            82697.833,
            80769.132,
            78879.629,
            77014.432,
            75215.626,
            73384.587,
            71652.482,
            69895.93,
            68209.301,
            66553.669,
            64921.981,
            63310.323,
            61742.115,
            60205.018,
            58698.658,
            57190.657,
            55760.865,
            54331.169,
            52908.167,
            51550.273,
            50225.254,
            48922.421,
            47614.533,
            46362.049,
            45098.569,
            43926.083,
            42736.03,
            41593.473,
            40425.26,
            39316.237,
            38243.651,
            37170.617,
            36114.609,
            35084.19,
            34117.233,
            33206.509,
            32231.505,
            31318.728,
            30403.404,
            29540.0550000001,
            28679.236,
            27825.862,
            26965.216,
            26179.148,
            25462.08,
            24645.952,
            23922.523,
            23198.144,
            22529.128,
            21762.4179999999,
            21134.779,
            20459.117,
            19840.818,
            19187.04,
            18636.3689999999,
            17982.831,
            17439.7389999999,
            16874.547,
            16358.2169999999,
            15835.684,
            15352.914,
            14823.681,
            14329.313,
            13816.897,
            13342.874,
            12880.882,
            12491.648,
            12021.254,
            11625.392,
            11293.7610000001,
            10813.697,
            10456.209,
            10099.074,
            9755.39000000001,
            9393.18500000006,
            9047.57900000003,
            8657.98499999999,
            8395.85900000005,
            8033,
            7736.95900000003,
            7430.59699999995,
            7258.47699999996,
            6924.58200000005,
            6691.29399999999,
            6357.92500000005,
            6202.05700000003,
            5921.19700000004,
            5628.28399999999,
            5404.96799999999,
            5226.71100000001,
            4990.75600000005,
            4799.77399999998,
            4622.93099999998,
            4472.478,
            4171.78700000001,
            3957.46299999999,
            3868.95200000005,
            3691.14300000004,
            3474.63100000005,
            3341.67200000002,
            3109.14000000001,
            3071.97400000005,
            2796.40399999998,
            2756.17799999996,
            2611.46999999997,
            2471.93000000005,
            2382.26399999997,
            2209.22400000005,
            2142.28399999999,
            2013.96100000001,
            1911.18999999994,
            1818.27099999995,
            1668.47900000005,
            1519.65800000005,
            1469.67599999998,
            1367.13800000004,
            1248.52899999998,
            1181.23600000003,
            1022.71900000004,
            1088.20700000005,
            959.03600000008,
            876.095999999903,
            791.183999999892,
            703.337000000058,
            731.949999999953,
            586.86400000006,
            526.024999999907,
            323.004999999888,
            320.448000000091,
            340.672999999952,
            309.638999999966,
            216.601999999955,
            102.922999999952,
            19.2399999999907,
            -0.114000000059605,
            -32.6240000000689,
            -89.3179999999702,
            -153.497999999905,
            -64.2970000000205,
            -143.695999999996,
            -259.497999999905,
            -253.017999999924,
            -213.948000000091,
            -397.590000000084,
            -434.006000000052,
            -403.475000000093,
            -297.958000000101,
            -404.317000000039,
            -528.898999999976,
            -506.621000000043,
            -513.205000000075,
            -479.351000000024,
            -596.139999999898,
            -527.016999999993,
            -664.681000000099,
            -680.306000000099,
            -704.050000000047,
            -850.486000000034,
            -757.43200000003,
            -713.308999999892, } };

    private static final long[] THRESHOLDS = new long[] {
        10,
        20,
        40,
        80,
        220,
        400,
        900,
        1800,
        3100,
        6500,
        11500,
        20000,
        50000,
        120000,
        350000 };

    protected final int m;
    private final double alphaMM;

    public AbstractHyperLogLog(int precision) {
        super(precision);
        m = 1 << p;
        final double alpha;
        switch (p) {
            case 4:
                alpha = 0.673;
                break;
            case 5:
                alpha = 0.697;
                break;
            default:
                alpha = 0.7213 / (1 + 1.079 / m);
                break;
        }
        alphaMM = alpha * m * m;
    }

    /** Add a new runLen to the register. Implementor should only keep the value if it is
     * bigger that the current value of the register provided. */
    protected abstract void addRunLen(long bucketOrd, int register, int runLen);

    /** Returns an iterator over all values of the register. */
    protected abstract RunLenIterator getRunLens(long bucketOrd);

    public void collect(long bucketOrd, long hash) {
        final int index = Math.toIntExact(index(hash, p));
        final int runLen = runLen(hash, p);
        addRunLen(bucketOrd, index, runLen);
    }

    @Override
    public long cardinality(long bucketOrd) {
        double inverseSum = 0;
        int zeros = 0;
        RunLenIterator iterator = getRunLens(bucketOrd);
        while (iterator.next()) {
            final int runLen = iterator.value();
            inverseSum += 1. / (1L << runLen);
            if (runLen == 0) {
                ++zeros;
            }
        }
        double e1 = alphaMM / inverseSum;
        double e2 = e1 <= 5 * m ? e1 - estimateBias(e1) : e1;
        long h;
        if (zeros != 0) {
            h = linearCounting(m, zeros);
        } else {
            h = Math.round(e2);
        }
        if (h <= threshold()) {
            return h;
        } else {
            return Math.round(e2);
        }
    }

    public void collectEncoded(long bucketOrd, int encoded) {
        final int runLen = decodeRunLen(encoded, p);
        final int index = decodeIndex(encoded, p);
        addRunLen(bucketOrd, index, runLen);
    }

    static long index(long hash, int p) {
        return hash >>> (64 - p);
    }

    static int runLen(long hash, int p) {
        return 1 + Math.min(Long.numberOfLeadingZeros(hash << p), 64 - p);
    }

    static int decodeRunLen(int encoded, int p) {
        if ((encoded & 1) == 1) {
            return (((encoded >>> 1) & 0x3F) + (P2 - p));
        } else {
            final int bits = encoded << (31 + p - P2);
            assert bits != 0;
            return 1 + Integer.numberOfLeadingZeros(bits);
        }
    }

    static int decodeIndex(int encoded, int p) {
        long index;
        if ((encoded & 1) == 1) {
            index = encoded >>> 7;
        } else {
            index = encoded >>> 1;
        }
        return (int) (index >>> (P2 - p));
    }

    private double estimateBias(double e) {
        final double[] rawEstimateData = rawEstimateData();
        final double[] biasData = biasData();

        final double[] weights = new double[BIAS_K];
        int index = biasData.length - BIAS_K;
        for (int i = 0; i < rawEstimateData.length; ++i) {
            final double w = 1.0 / Math.abs(rawEstimateData[i] - e);
            final int j = i % weights.length;
            if (Double.isInfinite(w)) {
                return biasData[i];
            } else if (weights[j] >= w) {
                index = i - BIAS_K;
                break;
            }
            weights[j] = w;
        }

        double weightSum = 0.0;
        double biasSum = 0.0;
        for (int i = 0, j = index; i < BIAS_K; ++i, ++j) {
            final double w = weights[i];
            final double b = biasData[j];
            biasSum += w * b;
            weightSum += w;
        }
        return biasSum / weightSum;
    }

    private double[] biasData() {
        return BIAS_DATA[p - 4];
    }

    private double[] rawEstimateData() {
        return RAW_ESTIMATE_DATA[p - 4];
    }

    private long threshold() {
        return THRESHOLDS[p - 4];
    }

    /**
     * Iterator over a HyperLogLog register
     *
     * @opensearch.internal
     */
    public interface RunLenIterator {

        /**
         * Moves the iterator to the next element if it exists.
         * @return true if there is a next register, else false.
         */
        boolean next();

        /**
         * Value of the register.
         * @return the current value of the register.
         */
        byte value();
    }
}
